Skip to content

Instantly share code, notes, and snippets.

@sanlee42
Last active December 12, 2022 11:55
Show Gist options
  • Save sanlee42/5e202231731b4861f1d6b558674b1407 to your computer and use it in GitHub Desktop.
Save sanlee42/5e202231731b4861f1d6b558674b1407 to your computer and use it in GitHub Desktop.

Starcoin EasyGas 是一个结合 Starcoin DAO 进行线上治理的一个应用。用户可以发起投票来决定哪些 Token 可以用作 Gas Fee 的支付。

以下是通过 Starcoin EasyGas 从发起投票到将某个 Token 用于支付 Gas Fee 的一个例子:

  1. 用户发起投票,提议将某个 Token 用作 Gas Fee 的支付方式。
  2. 其他用户可以对该提议进行投票,表决是否支持该提议。
  3. 如果提议获得足够的支持,则该提议将成为决议,并被添加到 Starcoin DAO 的决策记录中。
  4. 当用户在 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

参考 Starcoin easy gas testsuite

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment