请说明如何在没有Chainweaver web UI的情况下将智能契约部署到testnet或mainnet?我知道我需要一个YAML文件,但我该如何处理它,我到底要把它发送到哪里呢?
我需要运行pact服务器,chainweb api还是.?我找不到任何向导
发布于 2022-05-19 07:55:34
步骤0:安装先决条件
安装协约
步骤1:创建契约模块
我们将部署以下pact模块。为了简单起见,我们正在部署的pact代码不使用事务的数据字段(read是利用该字段的一个这样的pact函数)。否则,所附的YAML文件将不得不更改。我们还假设此契约代码被保存为test.pact。
(namespace 'free)
(module someModuleName AUTONOMOUS
(defcap AUTONOMOUS ()
true)
(defun dummy ()
(+ 1 2)
)
)步骤2:创建YAML文件
下面的YAML文件将与pact -a一起使用,以签署并生成向Testnet提交事务所需的转义JSON。
codeFile: /Users/linda.ortega.cordoves/pact/test.pact
networkId: testnet04
publicMeta:
chainId: "0"
gasLimit: 1000
ttl: 28000
creationTime: 1585056536
sender: "testing"
gasPrice: 0.00001
keyPairs:
- public: 1d877a7b4524b6724a6ae708cf9ea7396d6ee9d17b10098b7793800177669c1d
secret: 33fcd94b8a42057bd4e3190f8983e3a73ec96c3f60df95c9e2aa3f13602c714f
nonce: step02该文件做出了一些假设,这些假设可能会根据具体实现的不同而改变:
我们要上传的pact的完整路径是: /Users/linda.ortega.cordoves/pact/test.pact
我们希望向Testnet提交一个事务,它的网络id是testnet04。
我们希望提交到Testnet上的第零链,它的链id为"0“。
UNIX时间中当前的创建时间为1585056536秒。此值必须更改,因此可以通过导航到此网站或在命令行上运行日期+%s来计算它。
该“测试”是在Testnet网络上支付gas (也称为“发件人”)的帐户。要创建一个Testnet帐户并为其提供一些硬币,请导航到Testnet硬币水龙头。您需要生成一个ED22519公钥对才能使用水龙头。您可以使用pact -g生成此密钥对。一定要把它保存在某个地方。
在"keyPairs“中指定的密钥对对应于用于创建气体支付者帐户的密钥对,在本例中这是”测试“。这必须改变所提供的默认值。
我们将这个YAML文件保存为/Users/linda.ortega.cordoves/pact/test.yaml。
步骤3:将事务提交到Testnet
现在,我们将提交通过命中Testnet节点的/send端点而创建的示例pact模块。在命令行中,运行以下命令:
pact -a /Users/linda.ortega.cordoves/pact/test.yaml | curl -H "Content-Type: application/json" -d @- https://us1.testnet.chainweb.com/chainweb/0.0/testnet04/chain/0/pact/api/v1/send在这里,我们在创建YAML文件时所做的一些假设变得非常重要:
网络id必须与我们提交的节点端点匹配。因为我们选择的网络id是testnet04,所以我们必须提交给/chainweb/0.0/testnet04 04/。我们提交给的节点(在本例中是us1.testnet.chainweb.com)必须具有这个网络id。链id也必须匹配。我们选择了"0“的chain id,所以我们必须提交给/chain/0/。我们将yaml文件保存到/Users/linda.ortega.cordoves/pact/test.yaml。如果我们成功地提交了事务,我们将看到以下内容:
{"requestKeys":["Vetli41gi_S4-dZlro0visI8QT15brHoPe4vxMmhdek"]}这意味着我们的事务已经成功地添加到块链的内存池中,并且正在等待挖掘。请注意从/send返回的请求键,因为我们将在轮询事务结果时使用它。
当我们尝试提交事务时,我们的事务也可能失败节点验证。如果发生这种情况,您将收到验证失败消息,而不是请求键。
步骤4:验证事务的结果
现在,我们将尝试通过访问/poll端点来获取提交到Testnet网络的事务的结果。在命令行中,运行以下命令:
curl -H "Content-Type: application/json" -d '{"requestKeys":["Vetli41gi_S4-dZlro0visI8QT15brHoPe4vxMmhdek"]}' -X POST https://us1.testnet.chainweb.com/chainweb/0.0/testnet04/chain/0/pact/api/v1/poll同样,我们在这一步中做了几个假设:
我们想要投票的Testnet节点是us1.testnet.chainweb.com。网络id是testnet04。注意,端点的一部分是/chainweb/0.0/testnet04 04/。我们正在轮询的链码是"0“链。注意,端点的一部分是/chain/0/。我们要轮询的请求键是Vetli41gi_S4-dZlro0visI8QT15brHoPe4vxMmhdek。如果成功挖掘了事务并将其添加到块链中,则/poll将返回以下JSON对象:
{
"Vetli41gi_S4-dZlro0visI8QT15brHoPe4vxMmhdek": {
"gas": 58,
"result": {
"status": "success",
"data": "Loaded module free.linda-test, hash n0g99JhWnO2F7X7f8o_zcAiSHBAWS_QSAfn4yUaqpps"
},
"reqKey": "Vetli41gi_S4-dZlro0visI8QT15brHoPe4vxMmhdek",
"logs": "0KzZQDJmEgnAKvPnO20UeGoE7KGCIN22nhjraeyp1aw",
"metaData": {
"blockTime": 1585056990071469,
"prevBlockHash": "dIYmpjBQge9yw0Yzhn0Sau-wJFwsLOFBmGbV3_0xYeE",
"blockHash": "yULpC5C-7tzRcc9sWm-f1bOC3JDvtxwT61hruW0aXrA",
"blockHeight": 261712
},
"continuation": null,
"txId": 266084
}
}请注意,事务可能在协议级别上失败,但仍然会被添加到区块链中,而gas也会被收费。如果发生这种情况,result.status字段将失败。
如果尚未挖掘事务,/poll将返回{}。继续重试,直到收到上面所示的JSON对象。
https://stackoverflow.com/questions/72295102
复制相似问题