- Create a new contract, skip this step if the contract already exists (How to import existent contract)
-
kuai contract new --name [contract-name]$ kuai contract new --name always-success # New contract "always-success" # Created binary (application) `always-success` package # Rewrite Cargo.toml # Rewrite capsule.toml # Done
- Build contract
-
kuai contract build --name [contract-name] --release$ kuai contract build --name always-success --release # Building contract always-success # Compiling always-success v0.1.0 (/code/contracts/always-success) # Done
- Deploy contract
-
kuai contract deploy --name [contract-name] --from [0x.....] --signer ckb-cli$ kuai contract deploy --name always-success --from ckt1qyqw8yx5hx6vwcm7eqren0d0v39wvfwdhy3q2807pp --signer ckb-cli # [warn] ANYONE_CAN_PAY script info not found in config! # [warn] OMNILOCK script info not found in config! # [warn] `config` changed, regenerate lockScriptInfos! # The address format generated by generateAddress or scriptToAddress will be deprecated, please migrate to encodeToAddress to generate the new ckb2021 full format address as soon as possible # Input ckt1qzda0cr08m85hc8jlnfp3zer7xulejywt49kt2rr0vthywaa50xwsq0rjr2tndx8vdlvspuehkhkgjhxyhxmjgsqw8hsk's password for sign messge by ckb-cli: # deploy success, txHash: 0x7507b59b5f715c0fcd83d55df5569d72ff1cb05cd399afe1f366e03918827a58
-
kuai contract deploy --name [contract-name] --from [0x.....] --export [transaction json file]$ kuai contract deploy --name always-success --from ckt1qyqw8yx5hx6vwcm7eqren0d0v39wvfwdhy3q2807pp --export ./tx.json # [warn] ANYONE_CAN_PAY script info not found in config! # [warn] OMNILOCK script info not found in config! # [warn] `config` changed, regenerate lockScriptInfos!
-
ckb-cli tx sign-inputs --tx-file [transaction json file] --from-account 0xe390d4b9b4c7637ec80799bdaf644ae625cdb922 --add-signatures$ ckb-cli tx sign-inputs --tx-file ./tx.json --from-account 0xe390d4b9b4c7637ec80799bdaf644ae625cdb922 --add-signatures # Password: # - lock-arg: 0xe390d4b9b4c7637ec80799bdaf644ae625cdb922 # signature: 0xf3af55aa4c9d6923852465a33d625ff2b5489409908259d79d6aa5bf15a407f10ec32cdd9a9ebff837cdccc2850fc533cab8f08a4c701b57e75530c329f56be201
-
ckb-cli tx send --tx-file [transaction json file]$ ckb-cli tx send --tx-file ./tx.json # 0xfd79d9c3e562b2c5c51df39e49fbb906c63cf2e33e5dbe2bbff12345fa4e6c72
-
kuai contract deploy --name [contract-name] --from multisig [R] [M] [...args] --export [transaction json file]$ kuai contract deploy --name always-success --from multisig 0 2 0xe390d4b9b4c7637ec80799bdaf644ae625cdb922 0xb6ddba87bb5af5f053b1ae5bcbc7f4de03479f7e --export ./tx.json # [warn] ANYONE_CAN_PAY script info not found in config! # [warn] OMNILOCK script info not found in config! # [warn] `config` changed, regenerate lockScriptInfos! # The address format generated by generateAddress or scriptToAddress will be deprecated, please migrate to encodeToAddress to generate the new ckb2021 full format address as soon as possible
-
Sign transactions according to multi-signature address:
ckb-cli tx sign-inputs --tx-file [transaction json file] --from-account [args] --add-signatures# sign by 0xe390d4b9b4c7637ec80799bdaf644ae625cdb922 $ ckb-cli tx sign-inputs --tx-file ./tx.json --from-account 0xe390d4b9b4c7637ec80799bdaf644ae625cdb922 --add-signatures # Password: # - lock-arg: 0x9ab40977fbad98c42cb0688cb10557a76f32c7ff # signature: 0x2395d9d3fde764a6ba78b26699dab410d3609c0303c436768d24add978a64a8c4c4653051fe88124e9f2acb139179f291a40f79ebad93dac3433ad10b39415dd00
# sign by 0xb6ddba87bb5af5f053b1ae5bcbc7f4de03479f7e $ ckb-cli tx sign-inputs --tx-file ./tx.json --from-account 0xb6ddba87bb5af5f053b1ae5bcbc7f4de03479f7e --add-signatures # Password: # - lock-arg: 0x9ab40977fbad98c42cb0688cb10557a76f32c7ff # signature: 0x6efc1f6359b34fc6bc7edb32059947b61b9914272bda2ed7a7b1aeb0d7d272db7121fcab8cbe25ef8947a0ab1019dcaae3c5f83a9c0f6f486a81fe9787bc16cd01
-
ckb-cli tx send --tx-file [transaction json file]$ ckb-cli tx send --tx-file ./tx.json # 0xa0fad2950093488baf41b25f3459482b5c7870b21f8d2bb709a731417cb99e33
Typically, the file directory of a ckb contract looks something like this:
.
├── Cargo.toml
└── src
├── entry.rs
├── error.rs
└── main.rs-
Copy all of this directory directly into the kuai's convention directory where the contracts are placed, which by default should be
/contract/contracts/ -
Edit the
/contract/cargo.tomlfile to add information about the contract to[workspace], e.g.[workspace] members = ["tests", "contracts/kuai-mvp-contract", "types", "contracts/always-success"]
kuai contract deploy --name [contract-name] --from [0x.....] --network [networkname]- or set network to
.envfile
Kuai currently has three default settings for networks, testnet / mainnet / devnet, and users can also add custom network
-
edit
kuai.config.jsof project and add network tornetworksfieldnetworks: { [networkname: string]: { rpcUrl: string prefix: string scripts?: Record<string, ScriptConfig> } }