来源 | 以太坊爱好者责编 | 晋兆雨头图 | 付费下载于视觉中国在我们之前的文章中|创建和签名以太坊交易( 二 )


来源 | 以太坊爱好者责编 | 晋兆雨头图 | 付费下载于视觉中国在我们之前的文章中|创建和签名以太坊交易

-椭圆曲线签名算法基于“离散对数问题” , 其经典形式是 , 给定一个整数k , 使得a^k≡b(modp) , 其中p是质数 , 求k 。 不像其它公钥密码学算法比如RSA , 仅基于大指数的因式分解问题(这在最近已经成了格密码学(lattice-basedcryptography)的攻击目标) 。 今天还没有发现计算k的高效方法(可描述为椭圆曲线上的给定点P和Q) 。 这也是虽然不同的区块链使用的曲线和签名算法有所不同 , 但都基于椭圆曲线的原因 。 -
一旦一笔交易有了签名、随签名一起发到了网络中、被打包到了一个成功挖出的区块中 , 那这笔交易就不能再撤销了 。 不像银行操作 , 成功打包上链的交易无法撤销 , 也无法恢复到还没执行这笔交易的状态 。 大部分公链都让交易的内容完全可见 , 所以这些交易所使用的区块链就是这些资产的终极真相来源 。
以太坊交易的结构
现在我们已经完全理解了区块链交易的特性 , 我们已经准备好了 , 可以去创建一笔以太坊交易了 。 我们从一笔简单的转账交易开始:转账0.1ETH给地址0x17A98d2b11Dfb784e63337d2170e21cf5DD04631 。 交易可以用JavaScriptObjectNotation(JSON)格式来表达 , 在创建这笔交易时 , 我们可以在MyEtherWallet上看到这些信息(在登录后使用sendoffline):
{"nonce":"0x00",//0indecimal"gasLimit":"0x5208",//21000indecimal"gasPrice":"0x3b9aca00",//1000000000indecimal"to":"0x17A98d2b11Dfb784e63337d2170e21cf5DD04631","value":"0x16345785d8a0000",//100000000000000000indecimal"data":"0x",//“empty”valueindecimal"chainId":1//Ethereumnetworkid}
(编者注:MyEtherWallet网站最大的用途是帮你生成一个以太坊账户 , 但直接使用它来发送交易可能需要你暴露自己的私钥或助记词 , 是一种非常不安全的做法 , 极度不推荐 。 如果你想使用MyEtherWallet , 请配合使用他们的浏览器插件或手机钱包 , 而不是直接使用他们的网站 。 )
这里马上会跳出几个值:nonce、gasLimit、gasPrice、data和chainId 。 没有一个跟交易的内容有关 , 但它们都跟交易的执行方式有关 。 这是因为 , 为了在以太坊上发送一笔交易 , 你要事先定义好一些额外的参数 , 来告诉矿工如何处理你的交易 。 交易的两个参数都跟“gas”有关 。 Gas本身是一个单位 , 用来衡量一笔交易的计算负担 , 作为给以太坊矿工支付的依据 。 一个参数是gasPrice , 表示用户愿意为每单位的gas支付的单价 , 以Gwei为单位(Gwei是ETH的1/10^9);另一个是gasLimit , 是用户指定自己的交易可以耗用的最大Gas数量 。 这些参数可以用以太坊节点来估算出一个合理的数值 , 一般来说都由钱包服务商帮你填好了 。
来源 | 以太坊爱好者责编 | 晋兆雨头图 | 付费下载于视觉中国在我们之前的文章中|创建和签名以太坊交易

-以太坊中的价值通常都以wei为单位 。 wei是以太坊区块链上最小的价值单位 , 是ETH的1/10^18 。 GasPrice则通常以gigawei(缩写为Gwei)为单位 。 GasPrice在以太坊网络上是个复杂的问题 , 因为它经常会浮动 。 EIP-1559是一个最近通过的网络变更 , 可能会在今年底推出 , 可能会缓解GasPrice的剧烈波动 。 除了wei和Gwei , 还有其它用于表示价值的单位 。 要了解这些单位 , 请访问eth-converter.com-
(编者注:作者本文出版于2021年4月 。 现已确定 , 以太坊核心开发者决定在2021年8月的“伦敦”升级中包含1559 。 1559对用户体验的改变体现在 , 用户不再直接指定GasPrice , 相反 , 要指定两个数值:MaxFeePerGas和MaxPriorityFeePerGas , 前者表示你愿意为单位Gas支付的最大价格 , 而后者表示你愿意为单位Gas支付给矿工的最大价格;实际上你为Gas支付的单价是min(MaxFeePerGas,MaxPriorityFeePerGas+BaseFee)(即两者中取小的那一个)而BaseFee是一个随网络的上一个区块的满载率自动波动的一个数值 。 矿工得到的单价是你的Gas单价减去BaseFee;而BaseFee部分则会被销毁 。 值得注意的是 , 在可预见的未来 , 用户仍然可以使用传统的交易格式来发送交易 , 但这种格式可能最终会在协议层被废弃 , 即 , 本文所讲解的以太坊交易的格式 , 有一天可能会过时 。 )