Skip to content

Commit

Permalink
[daospace] Refactor daospace functions name (#195)
Browse files Browse the repository at this point in the history
* [daospace] Refactor daospace functions name
  • Loading branch information
jolestar committed Nov 2, 2022
1 parent 19b7d1d commit 0dd5c68
Show file tree
Hide file tree
Showing 12 changed files with 52 additions and 45 deletions.
Binary file modified build/StarcoinFramework/bytecode_modules/MemberProposalPlugin.mv
Binary file not shown.
2 changes: 1 addition & 1 deletion build/StarcoinFramework/docs/MemberProposalPlugin.md
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@
}<b>else</b>{
<a href="Option.md#0x1_Option_some">Option::some</a>(image_url)
};
<a href="DAOSpace.md#0x1_DAOSpace_member_offer">DAOSpace::member_offer</a>(&member_cap, member,op_image_data , op_image_url , init_sbt);
<a href="DAOSpace.md#0x1_DAOSpace_issue_member_offer">DAOSpace::issue_member_offer</a>(&member_cap, member,op_image_data , op_image_url , init_sbt);
}
</code></pre>

Expand Down
Binary file modified build/StarcoinFramework/source_maps/MemberProposalPlugin.mvsm
Binary file not shown.
2 changes: 1 addition & 1 deletion integration-tests/daospace/dao_member_proposal.exp
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ task 8 'run'. lines 71-80:

task 10 'run'. lines 84-91:
{
"gas_used": 378392,
"gas_used": 608438,
"status": "Executed"
}

Expand Down
2 changes: 1 addition & 1 deletion integration-tests/daospace/dao_member_proposal.move
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,7 @@ script{

// execute action
fun join(sender: signer){
DAOSpace::join_member_entry<X>(sender);
DAOSpace::accept_member_offer_entry<X>(sender);
}
}
// check: EXECUTED
2 changes: 1 addition & 1 deletion integration-tests/daospaceplugin/gas_oracle_plugin.exp
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ task 7 'run'. lines 87-96:

task 9 'run'. lines 100-114:
{
"gas_used": 377540,
"gas_used": 614488,
"status": "Executed"
}

Expand Down
2 changes: 1 addition & 1 deletion integration-tests/daospaceplugin/mint_proposal_plugin.exp
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ task 11 'run'. lines 110-123:

task 12 'run'. lines 125-139:
{
"gas_used": 377540,
"gas_used": 614488,
"status": "Executed"
}

Expand Down
56 changes: 30 additions & 26 deletions sources/daospace/DAOSpace.move
Original file line number Diff line number Diff line change
Expand Up @@ -567,7 +567,7 @@ module StarcoinFramework::DAOSpace {
}

/// Save the item to the storage
public fun save<DAOT: store, PluginT, V: store>(_cap: &DAOStorageCap<DAOT, PluginT>, item: V) acquires DAOAccountCapHolder {
public fun save_to_storage<DAOT: store, PluginT, V: store>(_cap: &DAOStorageCap<DAOT, PluginT>, item: V) acquires DAOAccountCapHolder {
let dao_signer = dao_signer<DAOT>();
assert!(!exists<StorageItem<PluginT, V>>(Signer::address_of(&dao_signer)), Errors::already_published(ERR_STORAGE_ERROR));
move_to(&dao_signer, StorageItem<PluginT, V>{
Expand All @@ -576,20 +576,20 @@ module StarcoinFramework::DAOSpace {
}

/// Get the item from the storage
public fun take<DAOT: store, PluginT, V: store>(_cap: &DAOStorageCap<DAOT, PluginT>): V acquires StorageItem {
public fun take_from_storage<DAOT: store, PluginT, V: store>(_cap: &DAOStorageCap<DAOT, PluginT>): V acquires StorageItem {
let dao_address = dao_address<DAOT>();
assert!(exists<StorageItem<PluginT, V>>(dao_address), Errors::not_published(ERR_STORAGE_ERROR));
let StorageItem{ item } = move_from<StorageItem<PluginT, V>>(dao_address);
item
}

/// Check the item has exists in storage
public fun exists_storage<DAOT: store, PluginT, V: store>(): bool {
public fun exists_in_storage<DAOT: store, PluginT, V: store>(): bool {
exists<StorageItem<PluginT, V>>(dao_address<DAOT>())
}

/// borow the item from the storage
public fun borrow_storage<DAOT: store, PluginT, V: store+copy>(_cap: &DAOStorageCap<DAOT, PluginT>): V acquires StorageItem {
/// Copy the item from the storage
public fun copy_from_storage<DAOT: store, PluginT, V: store+copy>(_cap: &DAOStorageCap<DAOT, PluginT>): V acquires StorageItem {
let dao_address = dao_address<DAOT>();
assert!(exists<StorageItem<PluginT, V>>(dao_address), Errors::not_published(ERR_STORAGE_ERROR));
let storage_item = borrow_global<StorageItem<PluginT, V>>(dao_address);
Expand Down Expand Up @@ -617,14 +617,15 @@ module StarcoinFramework::DAOSpace {

// Membership function

struct OfferMemeber<phantom DAOT> has drop, store{
struct MemeberOffer<phantom DAOT> has drop, store{
to_address: address,
image_data:Option::Option<vector<u8>>,
image_url:Option::Option<vector<u8>>,
init_sbt: u128
}

public fun member_offer<DAOT: store, PluginT>(_cap: &DAOMemberCap<DAOT, PluginT>, to_address: address, image_data:Option::Option<vector<u8>>, image_url:Option::Option<vector<u8>>, init_sbt: u128) acquires DAOAccountCapHolder, MemberEvent, DAO {
/// invite a new member to the DAO
public fun issue_member_offer<DAOT: store, PluginT>(_cap: &DAOMemberCap<DAOT, PluginT>, to_address: address, image_data:Option::Option<vector<u8>>, image_url:Option::Option<vector<u8>>, init_sbt: u128) acquires DAOAccountCapHolder, MemberEvent, DAO {
let dao_address = dao_address<DAOT>();
let dao_signer = dao_signer<DAOT>();
let memeber_event = borrow_global_mut<MemberEvent>(dao_address);
Expand All @@ -640,14 +641,14 @@ module StarcoinFramework::DAOSpace {
return
};

let op_index = Offer::find_offer<OfferMemeber<DAOT>>(dao_address, to_address);
let op_index = Offer::find_offer<MemeberOffer<DAOT>>(dao_address, to_address);
if(Option::is_some(&op_index)){
let OfferMemeber<DAOT>{
let MemeberOffer<DAOT>{
to_address,
image_data,
image_url,
init_sbt
} = Offer::retake<OfferMemeber<DAOT>>(&dao_signer, Option::destroy_some(op_index));
} = Offer::retake<MemeberOffer<DAOT>>(&dao_signer, Option::destroy_some(op_index));
Event::emit_event(&mut memeber_event.member_offer_event_handler, MemberOfferEvent {
dao_id: dao_id(dao_address),
addr:to_address,
Expand All @@ -659,13 +660,13 @@ module StarcoinFramework::DAOSpace {
return
};

let offered = OfferMemeber<DAOT> {
let offered = MemeberOffer<DAOT> {
to_address,
image_data: copy image_data,
image_url: copy image_url,
init_sbt
};
Offer::create_v2<OfferMemeber<DAOT>>(&dao_signer, offered, to_address, 0);
Offer::create_v2<MemeberOffer<DAOT>>(&dao_signer, offered, to_address, 0);

Event::emit_event(&mut memeber_event.member_offer_event_handler, MemberOfferEvent {
dao_id: dao_id(dao_address),
Expand All @@ -677,18 +678,19 @@ module StarcoinFramework::DAOSpace {
});
}

public fun member_offer_revoke<DAOT: store, PluginT>(_cap: &DAOMemberCap<DAOT, PluginT>, to_address: address) acquires DAOAccountCapHolder, MemberEvent, DAO {
/// Review the member offer
public fun revoke_member_offer<DAOT: store, PluginT>(_cap: &DAOMemberCap<DAOT, PluginT>, to_address: address) acquires DAOAccountCapHolder, MemberEvent, DAO {
let dao_address = dao_address<DAOT>();
let dao_signer = dao_signer<DAOT>();
let op_index = Offer::find_offer<OfferMemeber<DAOT>>(dao_address, to_address);
let op_index = Offer::find_offer<MemeberOffer<DAOT>>(dao_address, to_address);
let memeber_event = borrow_global_mut<MemberEvent>(dao_address);
if(Option::is_some(&op_index)){
let OfferMemeber<DAOT>{
let MemeberOffer<DAOT>{
to_address,
image_data,
image_url,
init_sbt
} = Offer::retake<OfferMemeber<DAOT>>(&dao_signer, Option::destroy_some(op_index));
} = Offer::retake<MemeberOffer<DAOT>>(&dao_signer, Option::destroy_some(op_index));
Event::emit_event(&mut memeber_event.member_offer_event_handler, MemberOfferEvent {
dao_id: dao_id(dao_address),
addr:to_address,
Expand All @@ -700,19 +702,19 @@ module StarcoinFramework::DAOSpace {
}
}

/// Join DAO and get a membership by self
public fun join_member<DAOT: store>(sender: &signer) acquires DAONFTMintCapHolder, DAOSBTMintCapHolder, DAO, MemberEvent, DAONFTUpdateCapHolder {
/// Accept the MemberOffer and become a member
public fun accept_member_offer<DAOT: store>(sender: &signer) acquires DAONFTMintCapHolder, DAOSBTMintCapHolder, DAO, MemberEvent, DAONFTUpdateCapHolder {
let dao_address = dao_address<DAOT>();
let op_index = Offer::find_offer<OfferMemeber<DAOT>>(dao_address, Signer::address_of(sender));
let op_index = Offer::find_offer<MemeberOffer<DAOT>>(dao_address, Signer::address_of(sender));
assert!(Option::is_some(&op_index),1003);
IdentifierNFT::accept<DAOMember<DAOT>, DAOMemberBody<DAOT>>(sender);
let memeber_event = borrow_global_mut<MemberEvent>(dao_address);
let OfferMemeber<DAOT> {
let MemeberOffer<DAOT> {
to_address,
image_data,
image_url,
init_sbt
}= Offer::redeem_v2<OfferMemeber<DAOT>>(sender, dao_address, Option::destroy_some(op_index));
}= Offer::redeem_v2<MemeberOffer<DAOT>>(sender, dao_address, Option::destroy_some(op_index));
Event::emit_event(&mut memeber_event.member_offer_event_handler, MemberOfferEvent {
dao_id: dao_id(dao_address),
addr:to_address,
Expand All @@ -735,8 +737,8 @@ module StarcoinFramework::DAOSpace {
}
}

public (script) fun join_member_entry<DAOT: store>(sender: signer) acquires DAONFTMintCapHolder, DAOSBTMintCapHolder, DAO, MemberEvent , DAONFTUpdateCapHolder {
join_member<DAOT>(&sender)
public (script) fun accept_member_offer_entry<DAOT: store>(sender: signer) acquires DAONFTMintCapHolder, DAOSBTMintCapHolder, DAO, MemberEvent , DAONFTUpdateCapHolder {
accept_member_offer<DAOT>(&sender)
}

fun do_join_member<DAOT: store>(to_address: address, image_data:Option::Option<vector<u8>>, image_url:Option::Option<vector<u8>>, init_sbt: u128) acquires DAONFTMintCapHolder, DAOSBTMintCapHolder, DAO {
Expand Down Expand Up @@ -784,9 +786,9 @@ module StarcoinFramework::DAOSpace {
if(!is_member<DAOT>(member_addr)){
let dao_address = dao_address<DAOT>();
let dao_signer = dao_signer<DAOT>();
let op_index = Offer::find_offer<OfferMemeber<DAOT>>(dao_address, member_addr);
let op_index = Offer::find_offer<MemeberOffer<DAOT>>(dao_address, member_addr);
if(Option::is_some(&op_index)){
Offer::retake<OfferMemeber<DAOT>>(&dao_signer, Option::destroy_some(op_index));
Offer::retake<MemeberOffer<DAOT>>(&dao_signer, Option::destroy_some(op_index));
};
return
};
Expand Down Expand Up @@ -839,6 +841,7 @@ module StarcoinFramework::DAOSpace {
(member_id, sbt_amount)
}

// TODO refactor the cap and remove this function
public fun join_member_with_root_cap<DAOT: store>(_cap: &DAORootCap<DAOT>, to_address: address, image_data:Option::Option<vector<u8>>, image_url:Option::Option<vector<u8>>, init_sbt: u128) acquires DAONFTMintCapHolder, DAOSBTMintCapHolder, DAO, MemberEvent {
let dao_address = dao_address<DAOT>();
let memeber_event = borrow_global_mut<MemberEvent>(dao_address);
Expand All @@ -852,6 +855,7 @@ module StarcoinFramework::DAOSpace {
});
}

// TODO refactor the cap and remove this function
public fun join_member_with_member_cap<DAOT: store, Plugin>(_cap: &DAOMemberCap<DAOT, Plugin>, to_address: address, image_data:Option::Option<vector<u8>>, image_url:Option::Option<vector<u8>>, init_sbt: u128) acquires DAONFTMintCapHolder, DAOSBTMintCapHolder, DAO, MemberEvent {
let dao_address = dao_address<DAOT>();
let memeber_event = borrow_global_mut<MemberEvent>(dao_address);
Expand Down Expand Up @@ -984,7 +988,7 @@ module StarcoinFramework::DAOSpace {

public fun is_exist_member_offer<DAOT>(member_addr: address):bool{
let dao_address = dao_address<DAOT>();
Option::is_some(&Offer::find_offer<OfferMemeber<DAOT>>(dao_address, member_addr))
Option::is_some(&Offer::find_offer<MemeberOffer<DAOT>>(dao_address, member_addr))
}

struct PluginEvent<phantom DAOT : store, phantom PluginT: store, phantom EventT: store + drop> has key, store {
Expand Down
11 changes: 7 additions & 4 deletions sources/daospaceplugin/AnyMemberPlugin.move
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ module StarcoinFramework::AnyMemberPlugin{
use StarcoinFramework::Signer;
use StarcoinFramework::Option;
use StarcoinFramework::InstallPluginProposalPlugin;
use StarcoinFramework::IdentifierNFT;

struct AnyMemberPlugin has store, drop{}

Expand Down Expand Up @@ -37,11 +36,13 @@ module StarcoinFramework::AnyMemberPlugin{
);
}

//TODO how to unify arguments.
public fun join<DAOT: store>(sender: &signer, image_data:vector<u8>, image_url:vector<u8>){
let witness = AnyMemberPlugin{};
let sender_addr = Signer::address_of(sender);
if (DAOSpace::is_member<DAOT>(sender_addr) ) {
return
};
let member_cap = DAOSpace::acquire_member_cap<DAOT, AnyMemberPlugin>(&witness);
IdentifierNFT::accept<DAOSpace::DAOMember<DAOT>,DAOSpace::DAOMemberBody<DAOT>>(sender);
let op_image_data = if(Vector::is_empty(&image_data)){
Option::none<vector<u8>>()
}else{
Expand All @@ -52,7 +53,9 @@ module StarcoinFramework::AnyMemberPlugin{
}else{
Option::some(image_url)
};
DAOSpace::join_member_with_member_cap(&member_cap, Signer::address_of(sender), op_image_data, op_image_url, 1);

DAOSpace::issue_member_offer<DAOT, AnyMemberPlugin>(&member_cap, sender_addr, op_image_data, op_image_url, 1);
DAOSpace::accept_member_offer<DAOT>(sender);
}

public (script) fun join_entry<DAOT: store>(sender: signer, image_data:vector<u8>, image_url:vector<u8>){
Expand Down
14 changes: 7 additions & 7 deletions sources/daospaceplugin/GasOracleProposalPlugin.move
Original file line number Diff line number Diff line change
Expand Up @@ -75,18 +75,18 @@ module StarcoinFramework::GasOracleProposalPlugin {
let proposal_cap = DAOSpace::acquire_proposal_cap<DAOT, GasOracleProposalPlugin>(&witness);
let OracleSourceAddAction<TokenType>{ source_address } = DAOSpace::execute_proposal<DAOT, GasOracleProposalPlugin, OracleSourceAddAction<TokenType>>(&proposal_cap, &sender, proposal_id);
let storage_cap = DAOSpace::acquire_storage_cap<DAOT, GasOracleProposalPlugin>(&witness);
let source_addresses = if (!DAOSpace::exists_storage<DAOT, GasOracleProposalPlugin, OracleSources<TokenType>>()) {
let source_addresses = if (!DAOSpace::exists_in_storage<DAOT, GasOracleProposalPlugin, OracleSources<TokenType>>()) {
let genesis_singer= GenesisSignerCapability::get_genesis_signer();
Account::accept_token<TokenType>(genesis_singer);
Vector::singleton(source_address)
}else {
let OracleSources<TokenType>{ source_addresses } = DAOSpace::take<DAOT, GasOracleProposalPlugin, OracleSources<TokenType>>(&storage_cap);
let OracleSources<TokenType>{ source_addresses } = DAOSpace::take_from_storage<DAOT, GasOracleProposalPlugin, OracleSources<TokenType>>(&storage_cap);
assert!(Vector::contains(&source_addresses, &source_address) == false, Errors::invalid_state(ERR_PLUGIN_ORACLE_EXIST));
Vector::push_back(&mut source_addresses, source_address);
source_addresses
};

DAOSpace::save(&storage_cap, OracleSources<TokenType>{ source_addresses });
DAOSpace::save_to_storage(&storage_cap, OracleSources<TokenType>{ source_addresses });
}

public(script) fun create_oracle_remove_proposal<DAOT: store, TokenType: store>(sender: signer, title:vector<u8>, introduction:vector<u8>, description: vector<u8>, action_delay: u64, source_address: address) {
Expand All @@ -103,18 +103,18 @@ module StarcoinFramework::GasOracleProposalPlugin {
let proposal_cap = DAOSpace::acquire_proposal_cap<DAOT, GasOracleProposalPlugin>(&witness);
let OracleSourceRemoveAction<TokenType>{ source_address } = DAOSpace::execute_proposal<DAOT, GasOracleProposalPlugin, OracleSourceRemoveAction<TokenType>>(&proposal_cap, &sender, proposal_id);
let storage_cap = DAOSpace::acquire_storage_cap<DAOT, GasOracleProposalPlugin>(&witness);
assert!(DAOSpace::exists_storage<DAOT, GasOracleProposalPlugin, OracleSources<TokenType>>(), ERR_PLUGIN_ORACLE_NOT_EXIST);
let OracleSources<TokenType>{ source_addresses } = DAOSpace::take<DAOT, GasOracleProposalPlugin, OracleSources<TokenType>>(&storage_cap);
assert!(DAOSpace::exists_in_storage<DAOT, GasOracleProposalPlugin, OracleSources<TokenType>>(), ERR_PLUGIN_ORACLE_NOT_EXIST);
let OracleSources<TokenType>{ source_addresses } = DAOSpace::take_from_storage<DAOT, GasOracleProposalPlugin, OracleSources<TokenType>>(&storage_cap);
let (exist,index)= Vector::index_of(&source_addresses, &source_address);
assert!(exist, Errors::invalid_state(ERR_PLUGIN_ORACLE_NOT_EXIST));
Vector::remove(&mut source_addresses,index);
DAOSpace::save(&storage_cap, OracleSources<TokenType>{ source_addresses });
DAOSpace::save_to_storage(&storage_cap, OracleSources<TokenType>{ source_addresses });
}

public fun gas_oracle_read<DAOT: store, TokenType: store>(): u128 {
let witness = GasOracleProposalPlugin{};
let storage_cap = DAOSpace::acquire_storage_cap<DAOT, GasOracleProposalPlugin>(&witness);
let OracleSources{ source_addresses } = DAOSpace::borrow_storage<DAOT, GasOracleProposalPlugin, OracleSources<TokenType>>(&storage_cap);
let OracleSources{ source_addresses } = DAOSpace::copy_from_storage<DAOT, GasOracleProposalPlugin, OracleSources<TokenType>>(&storage_cap);
PriceOracleAggregator::latest_price_average_aggregator<STCToken<TokenType>>(&source_addresses, ORACLE_UPDATED_IN)
}

Expand Down
2 changes: 1 addition & 1 deletion sources/daospaceplugin/MemberProposalPlugin.move
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ module StarcoinFramework::MemberProposalPlugin{
}else{
Option::some(image_url)
};
DAOSpace::member_offer(&member_cap, member,op_image_data , op_image_url , init_sbt);
DAOSpace::issue_member_offer(&member_cap, member,op_image_data , op_image_url , init_sbt);
}

public (script) fun execute_proposal_entry<DAOT: store>(sender: signer, proposal_id: u64){
Expand Down
4 changes: 2 additions & 2 deletions sources/daospaceplugin/StakeToSBTPlugin.move
Original file line number Diff line number Diff line change
Expand Up @@ -186,14 +186,14 @@ module StarcoinFramework::StakeToSBTPlugin {
DAOSpace::acquire_member_cap<DAOT, StakeToSBTPlugin>(&witness);

if (!DAOSpace::is_member<DAOT>(sender_addr) ) {
DAOSpace::member_offer<DAOT, StakeToSBTPlugin>(
DAOSpace::issue_member_offer<DAOT, StakeToSBTPlugin>(
&member_cap,
sender_addr,
Option::none<vector<u8>>(),
Option::none<vector<u8>>(),
0
);
DAOSpace::join_member<DAOT>(sender);
DAOSpace::accept_member_offer<DAOT>(sender);
};

if (!exists<StakeList<DAOT, TokenT>>(sender_addr)) {
Expand Down

0 comments on commit 0dd5c68

Please sign in to comment.