按照官方文档拿git装,或者直接https://github.com/MystenLabs/sui/releases下预编译二进制
可以拿update-alternatives
链接到/usr/local/bin,也方便版本管理
不过没什么用,合约报错信息基本没有😅
# 不想看log的用 `RUST_LOG="off,sui_node=info" sui-test-validator`
sui-test-validator
# ACCOUNT 换成你自己的地址
curl --location --request POST '<http://127.0.0.1:9123/gas>' \\
--header 'Content-Type: application/json' \\
--data-raw '{
"FixedAmountRequest": {
"recipient": "ACCOUNT"
}
}'
sui client new-env --alias local --rpc <http://127.0.0.1:9000>
sui client switch --env local
# 在当前目录创建test文件夹并初始化sui move项目
sui move new test
# 需要先cd到在Move.toml所在目录
sui move build
# 依赖版本不符不用管,加 --skip-dependency-verification
# 如果是Sui包不符,可以试着在Move.toml中将Sui的rev切换到mainnet或者framework/testnet
sui client publish --gas-budget 1000000000
部署或调用后都会有长长的log输出,能在Transaction Effects
看到object变化情况,包括新创建的、变化的等,能获取到object ID和type用于进一步查询
Published Objects
就是新部署的合约
例如调用下面这个合约
module test::exp {
public entry fun initialize<A,B>(capa: MintA<A>, capb: MintB<B>,ctx: &mut TxContext) {
...
}
public fun attack(coina:Coin<CTF>, vec: vector<u256>)
...
}
调用attack,我们需要传入coin对象和一个vec,对于object直接传ID,原生类型就传值即可:
PACKAGE=0x6f9ca8a0994362540e9f8ca80e047a322fb57148e4ddbc47eebdaae8e1b38ff0
COINA=0x0ce2a8e748b3802818304dc7fca940b2dc9db2586c2e5a8705c45aa2281778e5
sui client call --function attack --module exp --package $PACKAGE --args $COINA "[1, 0, 0, 1, 1]" --gas-budget 1000000000
但在调用initialize函数时,可以看到这个函数有泛型参数,故我们需要通过 --type-args
先传递A和B的具体类型(不是传参数类型,而是泛型类型),具体是什么类型,可以在其他call或合约部署log中看object类型,格式都是: PACKAGE_ID::MODULE_NAME::TYPE
例如下方这种
sui client call --function attack --module exp --package $PACKAGE --args $CTFA_MINT $CTFB_MINT --type-args "$PACKAGE::ctfa::CTFA" "$PACKAGE::ctfb::CTFB" --gas-budget 1000000000