发送交易
本文档将指导您撰写并发送您的第一笔交易进入Conflux网络,包括Conflux的交易技术规范介绍,以及在Conflux网络中跟踪发送交易状态和错误处理的基本技巧。
对于普通用户,建议使用Conflux Portal这样的Conflux钱包,方便、安全、易用。
对于想在自己的程序中编写和发送交易的开发者来说。Conflux为您提供了多个不同语言的SDK。
JavaScript: js-conflux-sdk
Java: java-conflux-sdk
Go: go-conflux-sdk
以下文档将以js-conflux-sdk为例。
编写并发送我的第一个事务
在Conflux Portal上创建一个账户
1.安装Conflux Portal
2. 生成一个新账号
3.从龙头处获取测试网代币
4.导出并复制你的私钥到某个地方,我们以后会用到它
安装
npm install js-conflux-sdk
通过JavaScript程序发送交易
- 需要js-conflux-sdk,并设置一个Conflux提供者。对于Conflux 测试网已有一个节点提供,http://testnet-jsonrpc.conflux-chain.org:12537。它也可以改成任何其他Conflux节点,甚至是你自己设置的节点。
- 将私钥粘贴到程序中
- 交易组成部分,下面是可以填写的字段:
- nonce: 可选,一个交易的声明,以保证你的交易发送顺序,从某个随机的大数开始,然后逐个增加。如果缺失,cfx_getNextNonce的结果会自动填入,它适用于一般情况。有些情况下,比如短时间内发送大量的交易。建议自行维护nonce。
- gasPrice:可选,在Drip中,你希望为每一次消耗的燃料支付的价格。如果缺失,将自动填写cfx_gasPrice的结果,也就是最近交易的中位数。
- gas:可选,您希望在交易中使用的最大燃料消耗。在交易处理结束后,如果 used_gas >= gas * 0.75,未使用的燃料费将被退还。如果缺失,将自动填写cfx_estimateGasAndCollateral的结果,它适用于一般场景。
- to: 交易的接收方,可以是个人账户(以1开头)或合同(以8开头)。这里留一个空,可以部署一个合同。
- value:要转移的价值(以drip为单位)。
- storageLimit: 可选的,你想在交易中抵押的最大存储量(以Byte为单位)。如果缺失,将自动填写cfx_estimateGasAndCollateral的结果,它适用于一般的交易场景。
- epochHeight: 可选,一个交易是只能在[epochHeight - 10000, epochHeight + 10000]范围内的epochs内进行验证,所以这是一个超时机制。如果缺失,将自动填写cfx_epochNumber的结果,它适用于一般场景。
- data:可选,可以是交易的附件消息,也可以是合约调用的函数签名。如果缺失,则会填入一个空值。
- chain ID:可选,用于处理硬分叉或防止交易重入攻击。如果缺失,将填入0。
- from:用于签署交易的发送者账户(含私钥)。
- 通过发送
cfx.sendTransaction
,得到返回的交易哈希值,然后可以在Conflux Scan上搜索哈希值查看交易详情。
交易追溯
交易发送后可能处于以下几种不同的状态:
1.立即被RPC提供者拒绝
当提供者收到 cfx_sendRawTransaction RPC 调用后,它会尝试做基本的验证并将其插入到交易池中。如果交易有明显的错误,例如:RLP解码错误,签名验证错误,它将被立即拒绝,否则,它将被插入交易池并开始等待。否则,将被插入交易池,开始等待挖矿,RPC将返回一个交易哈希。
2.卡在了交易池里
但是,你得到的交易哈希值并不代表它已经成功执行了。Conflux交易会尽可能多地将已验证的交易存储在池子里,即使是那些nonce与预期不符或者余额不足以支付gas * gasPrice + value
的交易.
所以,如果你等了1分钟,在ConfluxScan中 仍然找不到交易,那么它很可能被卡在交易池中了。
可使用
来检查你的交易是否已经准备好被打包和挖矿了。
然后将结果与value + gas * gasPrice进行比较。
然后将结果与你填写的nonce进行比较。 你可以通过cfx_getTransactionByHash获取交易细节:
在这种情况下,您可能希望在修复nonce或余额问题后发送一个新的交易。需要注意的是,用相同的nonce替换池中的交易,需要更高的gasPrice。
3.已挖矿但跳过
如果你可以在ConfluxScan上查看交易,但它的状态总是显示 "跳过",这意味着它没有通过执行引擎的基本验证(比如,nonce不匹配,余额无法支付基本费用)而被跳过。
在这种情况下,你可能要在修复nonce或余额问题后发送一个新的交易。需要注意的是,用相同的nonce替换池中的交易,需要更高的gasPrice。
4.挖矿并执行后,出现了一些错误的结果
在这种情况下,您会在ConfluxScan上看到一个错误信息。这可能是这几个原因:
a. EVM错误: 比如assert,require
b. 余额足以支付基本费用,但不足以支付全部交易费用。
c. 达到存储上限
最好在Remix IDE中仔细检查你的合约,并通过 cfx_estimateGasAndCollateral RPC检查存储极限和余额问题。
5.挖矿并执行,交易结果没有错误
恭喜!你的第一笔交易完成了!