Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[daospace] Refactor daospace functions name #195

Merged
merged 2 commits into from
Nov 2, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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