Starcoin EasyGas 是一个结合 Starcoin DAO 进行线上治理的一个应用。用户可以发起投票来决定哪些 Token 可以用作 Gas Fee 的支付。
以下是通过 Starcoin EasyGas 从发起投票到将某个 Token 用于支付 Gas Fee 的一个例子:
- 用户发起投票,提议将某个 Token 用作 Gas Fee 的支付方式。
- 其他用户可以对该提议进行投票,表决是否支持该提议。
- 如果提议获得足够的支持,则该提议将成为决议,并被添加到 Starcoin DAO 的决策记录中。
- 当用户在 Starcoin 网络上进行交易时,可以使用被授权的 Token 来支付 Gas Fee。 上述过程可以在 Starcoin 的开发网络(devnet)或 Proxima 网络中进行测试。
以下是一个 EasyGas 从发起投票到将某 Token 用于支付 Gas fee 的例子。我们以 Starcoin dev 网络为例.
-
给账号创建一些 STC 以及 Dummy token, 并解锁账号。
$dev get-coin -v 1000000 $$account execute-function --function 0x1::DummyTokenScripts::mint --arg 9000u128 -b $account show $account unlock
-
向 StarcoinDAO 中进行质押。成为Starcoin Daoer.
$account execute-function --function 0x1::StakeToSBTPlugin::stake_entry -t 0x1::StarcoinDAO::StarcoinDAO -t 0x1::STC::STC --arg 1000000000000u128 --arg 60000u64 -b
-
设置 check point and 同时更新 state root
$account execute-function --function 0x1::Block::checkpoint_entry -b $dev call-api chain.get_block_by_number [$current_block_number,{"raw":true}] $account execute-function --function 0x1::Block::update_state_root_entry --arg $current_raw_header -b $ #其中,$current_block_number 和 $current_raw_header 可以从 dev call-api chain.get_block_by_number 中获取。
-
创建一个 以DummyToken 做为 gas token 的 proposal
$account execute-function --function 0x1::GasOracleProposalPlugin::create_oracle_add_proposal -t 0x1::StarcoinDAO::StarcoinDAO -t 0x1::DummyToken::DummyToken --arg b"title" --arg b"intro" --arg b"desc" --arg 0 --arg {{$.account[0].ok.account.address}} -b $dev sleep -t 60000 $dev gen-block $dev call --function 0x1::DAOSpace::proposal_state -t 0x1::StarcoinDAO::StarcoinDAO --arg 1u64
-
为proposal 发起投票
$account execute-function --function 0x1::DAOSpace::cast_vote_entry -t 0x1::StarcoinDAO::StarcoinDAO --arg 1u64 --arg $proof --arg 1u8 -b $dev sleep -t 3600000 $dev gen-block $dev call --function 0x1::DAOSpace::proposal_state -t 0x1::StarcoinDAO::StarcoinDAO --arg 1u64 $#其中proof通过调用获得 $dev call-api state.get_with_proof_by_root_raw ["$account_address/1/0x1::IdentifierNFT::IdentifierNFT<0x1::DAOSpace::DAOMember<0x1::StarcoinDAO::StarcoinDAO>,0x1::DAOSpace::DAOMemberBody<0x1::StarcoinDAO::StarcoinDAO>>","$state_root"]
-
将 proposal 放入queue
$account execute-function --function 0x1::DAOSpace::queue_proposal_action_entry -t 0x1::StarcoinDAO::StarcoinDAO --arg 1 -b" $dev sleep -t 3600000" $gen-block" $dev call --function 0x1::DAOSpace::proposal_state -t 0x1::StarcoinDAO::StarcoinDAO --arg 1u64"
-
执行 proposal 并初始化价格 oracle
$account execute-function --function 0x1::GasOracleProposalPlugin::execute_oracle_add_proposal -t 0x1::StarcoinDAO::StarcoinDAO -t 0x1::DummyToken::DummyToken --arg 1 -b # register oracle $account execute-function --function 0x1::PriceOracleScripts::register_oracle -t 0x1::GasOracle::STCToken<0x1::DummyToken::DummyToken> --arg 15u8 -b $account execute-function --function 0x1::PriceOracleScripts::init_data_source -t 0x1::GasOracle::STCToken<0x1::DummyToken::DummyToken> --arg 43793u128 -b $account execute-function --function 0x1::PriceOracleScripts::update -t 0x1::GasOracle::STCToken<0x1::DummyToken::DummyToken> --arg 43794u128 -b $dev call --function 0x1::GasOracleProposalPlugin::gas_oracle_read -t 0x1::StarcoinDAO::StarcoinDAO -t 0x1::DummyToken::DummyToken # transfer stc to 0x1 $account transfer --blocking -r 0x1 -v 10000000000
-
使用 DummyToken 作为gas fee进行转账。
$account transfer --blocking -r 0x1 -v 1 --gas-token 0x1::DummyToken::DummyToken