{"content":{"title":"OpenBuild Starknet Bootcamp 任务2：Ownable合约部署、所有权转移、dispatcher交互","body":"# OpenBuild Starknet Bootcamp 任务2：Ownable合约部署、所有权转移、dispatcher交互\r\n\r\n## 1 任务要求\r\n\r\n基于 [Ownable contract](https://github.com/gianalarcon/Ownable-Starknet/)，在 testnet 上用不同的钱包（argent 和 braavos）部署 2 个智能合约。将合约所有权从 argent 钱包账户转移到 braavos 账户。与 dispatcher 交互，从智能合约 1 调用智能合约 2 的数据。\r\n\r\n## 2 钱包准备\r\n\r\n### 2.1 创建钱包\r\n\r\n| 钱包    | 地址                                                         |\r\n| ------- | ------------------------------------------------------------ |\r\n| Argent  | 0x05E51CAF456A394D4ED02c4e0f373d8A162851c492d382F74822b10AaD11300d |\r\n| Braavos | 0x00b05390123e1e3749ae040834342eefd541f96e210b50f4ff6de8e8dd37b08d |\r\n\r\n### 2.2 跨链转账or领水\r\n\r\nhttps://goerli.starkgate.starknet.io/\r\n\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/12/2PXBdRpz657eef9b85ca5.png)\r\n\r\nhttps://faucet.goerli.starknet.io/\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/12/e47f2qtU657eefa366a83.png)\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/12/J64w5bo4657eefab4bd09.png)\r\n\r\n### 2.3 部署帐号\r\n\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/12/HsSJlW1d657eefb8cf60b.png)\r\n\r\n### 2.4 钱包准备\r\n\r\n#### （1）导入私钥\r\n\r\n```bash\r\n$ mkdir ~/.wallets\r\n\r\n# ArgentX\r\n$ starkli signer keystore from-key ~/.wallets/a_keystore.json\r\nEnter private key: \r\nEnter password: \r\nCreated new encrypted keystore file: /root/.wallets/a_keystore.json\r\nPublic key: 0x01ee7e9a91785e30a72b492cc17e2842fc6fc1ae5d25f922a174fab0bbb870e6\r\n\r\n# Braavos\r\n$ starkli signer keystore from-key ~/.wallets/b_keystore.json\r\nEnter private key: \r\nEnter password: \r\nCreated new encrypted keystore file: /root/.wallets/b_keystore.json\r\nPublic key: 0x053dba779be838414eaf38356c59b26d63846e5a0ac4d1f9e5ae6725b8c052e8\r\n```\r\n\r\n#### （2）创建账户描述\r\n\r\n```bash\r\n# ArgentX\r\n$ starkli account fetch 0x05E51CAF456A394D4ED02c4e0f373d8A162851c492d382F74822b10AaD11300d --output ~/.wallets/a_account.json --rpc https://starknet-goerli.g.alchemy.com/v2/xxx\r\nAccount contract type identified as: Argent X\r\nDescription: Argent X official account\r\nDownloaded new account config file: /root/.wallets/a_account.json\r\n\r\n# Braavos\r\nstarkli account fetch 0x00b05390123e1e3749ae040834342eefd541f96e210b50f4ff6de8e8dd37b08d --output ~/.wallets/b_account.json --rpc https://starknet-goerli.g.alchemy.com/v2/xxx\r\nAccount contract type identified as: Braavos\r\nDescription: Braavos official proxy account\r\nDownloaded new account config file: /root/.wallets/b_account.json\r\n```\r\n\r\n## 3 合约部署\r\n\r\n### 3.1 合约编译\r\n\r\n```bash\r\n$ scarb build\r\n   Compiling cairo1_v2 v0.1.0 (/root/Ownable-Starknet/Scarb.toml)\r\n    Finished release target(s) in 1 second\r\n```\r\n\r\n### 3.2 准备env\r\n\r\n- `.env_a`\r\n\r\n```bash\r\nexport STARKNET_RPC=\"https://starknet-goerli.g.alchemy.com/v2/xxx\"\r\nexport STARKNET_ACCOUNT=\"/root/.wallets/a_account.json\"\r\nexport STARKNET_KEYSTORE=\"/root/.wallets/a_keystore.json\"\r\n```\r\n\r\n- `.env_b`\r\n\r\n```bash\r\nexport STARKNET_RPC=\"https://starknet-goerli.g.alchemy.com/v2/xxx\"\r\nexport STARKNET_ACCOUNT=\"/root/.wallets/b_account.json\"\r\nexport STARKNET_KEYSTORE=\"/root/.wallets/b_keystore.json\"\r\n```\r\n\r\n### 3.3 声明合约\r\n\r\n```bash\r\n$ starkli declare target/dev/cairo1_v2_ownable.contract_class.json --compiler-version 2.4.0\r\nEnter keystore password: \r\nDeclaring Cairo 1 class: 0x00f6e62159da1635ccd0fe7b26a5b64d499138bb47718cdbb3dab5d5c5258e85\r\nCompiling Sierra class to CASM with compiler version 2.4.0...\r\nCASM class hash: 0x01cf30830a36b80f72e5a6da74186f5a9ffcee82806307c5be8316881dd4598c\r\nContract declaration transaction: 0x010dcf70544bdc3f97c9904da6b929ce2a12bee561c8166e008dda8ee658fc25\r\nClass hash declared:\r\n0x00f6e62159da1635ccd0fe7b26a5b64d499138bb47718cdbb3dab5d5c5258e85\r\n```\r\n\r\n### 3.4 部署合约\r\n\r\n```bash\r\n# ArgentX\r\n$ source .env_a\r\n$ starkli deploy 0x00f6e62159da1635ccd0fe7b26a5b64d499138bb47718cdbb3dab5d5c5258e85 0x05E51CAF456A394D4ED02c4e0f373d8A162851c492d382F74822b10AaD11300d\r\nEnter keystore password: \r\nDeploying class 0x00f6e62159da1635ccd0fe7b26a5b64d499138bb47718cdbb3dab5d5c5258e85 with salt 0x04360e936156b80eba7a53295668aff3d44e977a077624c8bdd9e732159d9258...\r\nThe contract will be deployed at address 0x007c7ccc869c2fbbb1145b96ae1f499c493503fecf953349614030c78bd38eed\r\nContract deployment transaction: 0x052464aa888794d3af81916244646a9af2e030ea1b6ecf4ca1f6231ac9f5856f\r\nContract deployed:\r\n0x007c7ccc869c2fbbb1145b96ae1f499c493503fecf953349614030c78bd38eed\r\n\r\n# Braavos\r\n$ source .env_b\r\n$ starkli deploy 0x00f6e62159da1635ccd0fe7b26a5b64d499138bb47718cdbb3dab5d5c5258e85 0x00b05390123e1e3749ae040834342eefd541f96e210b50f4ff6de8e8dd37b08d\r\nEnter keystore password: \r\nDeploying class 0x00f6e62159da1635ccd0fe7b26a5b64d499138bb47718cdbb3dab5d5c5258e85 with salt 0x05e24d42dd82fcff86e3341a6b4f944e781502e5792a15e63df468924955cebb...\r\nThe contract will be deployed at address 0x05596ddf0008770dd195d7ab22778be5362b61e1f3519f1bd7efba4fb7f2b210\r\nContract deployment transaction: 0x0734d968d80a92c96ca34fb27e378991461c27552ebc57b12360a386a7948e8e\r\nContract deployed:\r\n0x05596ddf0008770dd195d7ab22778be5362b61e1f3519f1bd7efba4fb7f2b210\r\n```\r\n\r\n## 4 合约调测\r\n\r\n### 4.1 获取钱包所有者\r\n\r\n```bash\r\n$ starkli call 0x007c7ccc869c2fbbb1145b96ae1f499c493503fecf953349614030c78bd38eed read_owner\r\n[\r\n    \"0x05e51caf456a394d4ed02c4e0f373d8a162851c492d382f74822b10aad11300d\"\r\n]\r\n\r\n$ starkli call 0x05596ddf0008770dd195d7ab22778be5362b61e1f3519f1bd7efba4fb7f2b210 read_owner\r\n[\r\n    \"0x00b05390123e1e3749ae040834342eefd541f96e210b50f4ff6de8e8dd37b08d\"\r\n]\r\n```\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/12/GDQ1vHNk657eeff166f6f.png)\r\n\r\n\r\n### 4.2 ArgentX帐号成功修改自己的数据\r\n\r\n```bash\r\n$ starkli invoke 0x007c7ccc869c2fbbb1145b96ae1f499c493503fecf953349614030c78bd38eed set_data 0x123\r\nEnter keystore password: \r\nInvoke transaction: 0x00af0f349edcaba005ba7ec25959fdb5282d2c474b2647a2c382dd63609c4f0b\r\n\r\n$ starkli call 0x007c7ccc869c2fbbb1145b96ae1f499c493503fecf953349614030c78bd38eed get_data\r\n[\r\n    \"0x0000000000000000000000000000000000000000000000000000000000000123\"\r\n]\r\n```\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/12/jGxdiyPo657eefe0db5a3.png)\r\n\r\n### 4.3 Braavos帐号修改ArgentX帐号的数据失败\r\n\r\n```bash\r\n$ starkli call 0x05596ddf0008770dd195d7ab22778be5362b61e1f3519f1bd7efba4fb7f2b210 other_func 0x007c7ccc869c2fbbb1145b96ae1f499c493503fecf953349614030c78bd38eed\r\n[\r\n    \"0x0000000000000000000000000000000000000000000000000000000000000123\"\r\n]\r\n\r\n$ starkli invoke 0x007c7ccc869c2fbbb1145b96ae1f499c493503fecf953349614030c78bd38eed set_data 0x456\r\nEnter keystore password: \r\nError: code=ContractError, message=\"Contract error\"\r\n```\r\n\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/12/4r7ImagP657ef0056378a.png)\r\n\r\n\r\n### 4.4 ArgentX帐号将所有权转移给Braavos帐号\r\n\r\n```bash\r\n# 转移前帐号归属\r\n$ starkli call 0x007c7ccc869c2fbbb1145b96ae1f499c493503fecf953349614030c78bd38eed read_owner\r\n[\r\n    \"0x05e51caf456a394d4ed02c4e0f373d8a162851c492d382f74822b10aad11300d\"\r\n]\r\n\r\n# 转移帐号所有权\r\n$ starkli invoke 0x007c7ccc869c2fbbb1145b96ae1f499c493503fecf953349614030c78bd38eed transfer_ownership 0x00b05390123e1e3749ae040834342eefd541f96e210b50f4ff6de8e8dd37b08d\r\nEnter keystore password: \r\nInvoke transaction: 0x06035e529d6f9cd973a78334a60825c22fe8872f1492825fcb50d90bd7728405\r\n\r\n# 转移后帐号归属\r\n$ starkli call 0x007c7ccc869c2fbbb1145b96ae1f499c493503fecf953349614030c78bd38eed read_owner\r\n[\r\n    \"0x00b05390123e1e3749ae040834342eefd541f96e210b50f4ff6de8e8dd37b08d\"\r\n]\r\n```\r\n\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/12/9bH0Cd1m657ef0135f14f.png)\r\n\r\n### 4.5 Braavos帐号再次修改ArgentX帐号的数据成功\r\n\r\n```bash\r\n$ starkli invoke 0x007c7ccc869c2fbbb1145b96ae1f499c493503fecf953349614030c78bd38eed set_data 0x456\r\nEnter keystore password: \r\nInvoke transaction: 0x05d96084aa237aceab74030ce187e4ccc1d97fb7f62fc6d3c3dd447ab9aeb8f6\r\n\r\n$ starkli call 0x05596ddf0008770dd195d7ab22778be5362b61e1f3519f1bd7efba4fb7f2b210 other_func 0x007c7ccc869c2fbbb1145b96ae1f499c493503fecf953349614030c78bd38eed\r\n[\r\n    \"0x0000000000000000000000000000000000000000000000000000000000000456\"\r\n]\r\n```\r\n\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/12/lf43wt1x657ef0984ac36.png)"},"author":{"user":"https://learnblockchain.cn/people/932","address":null},"history":"bafkreicqslu2v5vvqtk6qdl3s5hlykrujeukhd4vuipfwojuj3pnalbwwa","timestamp":1702827063,"version":1}