请问如何在没有 Chainweaver Web UI 的情况下将智能合约部署到测试网或主网?我知道我需要一个 YAML 文件,但我该如何处理它以及将它发送到哪里?
我需要运行 pact 服务器、chainweb api 还是......?我找不到任何指南
安装契约
我们将部署以下契约模块。为了简单起见,我们正在部署的契约代码不使用事务的数据字段(read-keyset 就是使用该字段的契约函数之一)。否则,必须更改随附的 YAML 文件。我们还假设此契约代码保存为 test.pact。
(namespace 'free)
(module someModuleName AUTONOMOUS
(defcap AUTONOMOUS ()
true)
(defun dummy ()
(+ 1 2)
)
)
Run Code Online (Sandbox Code Playgroud)
以下 YAML 文件将与 pact -a 一起使用来签名并生成向测试网提交交易所需的转义 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
Run Code Online (Sandbox Code Playgroud)
该文件做出了一些假设,这些假设可能会根据您的具体实现而改变:
我们要上传的协议的完整路径是:/Users/linda.ortega.cordoves/pact/test.pact
我们要向 Testnet 提交一笔交易,其网络 id 为 testnet04
我们要提交到测试网上的第零条链,该链的链 ID 为“0”
UNIX Epoch 时间中的当前创建时间是 1585056536 秒。该值必须更改,因此可以通过导航到此网站或在命令行上运行 date +%s 来计算它。
该“测试”是测试网网络上支付 Gas 费用的帐户(也称为“发送者”)。要创建测试网帐户并为其注入一些代币,请导航至测试网代币水龙头。您需要生成 ED22519 公钥-私钥对才能使用水龙头。您可以使用pact -g 来生成此密钥对。确保将其保存在某个地方。
“keyPairs”中指定的密钥对对应于用于创建 Gas 支付者帐户的密钥对,在本例中为“testing”。这必须更改提供的默认值。
我们将此 YAML 文件保存为 /Users/linda.ortega.cordoves/pact/test.yaml。
现在,我们将通过点击测试网节点的 /send 端点来提交我们创建的示例契约模块。在命令行中,运行以下命令:
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
Run Code Online (Sandbox Code Playgroud)
我们在创建 YAML 文件时所做的一些假设在这里变得很重要:
网络 ID 必须与我们提交的节点端点匹配。由于我们选择的网络id是testnet04,所以我们必须提交到/chainweb/0.0/testnet04/。我们提交到的节点(在本例中为 us1.testnet.chainweb.com)必须具有此网络 id。链 ID 也必须匹配。我们选择的链ID为“0”,因此我们必须提交到/chain/0/。我们将 yaml 文件保存到 /Users/linda.ortega.cordoves/pact/test.yaml。如果我们成功提交交易,我们将看到以下内容:
{"requestKeys":["Vetli41gi_S4-dZlro0visI8QT15brHoPe4vxMmhdek"]}
Run Code Online (Sandbox Code Playgroud)
这意味着我们的交易已成功添加到区块链的内存池中并等待被挖掘。记下从 /send 返回的请求密钥,因为我们将在轮询事务结果时使用它。
当我们尝试提交交易时,我们的交易也有可能无法通过节点验证。如果发生这种情况,您将收到验证失败消息而不是请求密钥。
现在,我们将尝试通过点击 /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
Run Code Online (Sandbox Code Playgroud)
同样,我们在此步骤中做出一些假设:
我们要轮询的测试网节点是 us1.testnet.chainweb.com。网络 ID 为 testnet04。请注意,端点的一部分是/chainweb/0.0/testnet04/。我们轮询的链 ID 是链“0”。请注意,端点的一部分是/chain/0/。我们轮询的请求密钥是 Vetli41gi_S4-dZlro0visI8QT15brHoPe4vxMmhdek。如果交易被成功挖掘并添加到区块链中,那么 /poll 将返回以下 JSON 对象:
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
Run Code Online (Sandbox Code Playgroud)
请注意,交易可能会在协议级别失败,但仍会添加到区块链中并收取 Gas 费用。如果发生这种情况,result.status 字段将失败。
如果交易尚未被挖掘,/poll 将返回 {}。继续重试,直到收到上面显示的 JSON 对象。
| 归档时间: |
|
| 查看次数: |
599 次 |
| 最近记录: |