以太坊交易

以太坊交易

  关于以太坊的交易,本文主要讲述三个部分的内容,分别是以太坊交易模型、交易的结构和交易的生命周期.

1. 以太坊交易模型

  交易模型部分分别讲解了比特币的UTXO交易模型,以太坊的Account交易模型,并通过对比来说明两者的优劣。

1.1 比特币的 UTXO 交易模型

  比特币的交易采用了UTXO模型,其中UTXO 代表 Unspent Transaction Output,即未花费的交易输出。通过下图来说明。
在这里插入图片描述UTXO交易模型

  图中使用的比特币单位是聪(satoshi),交易费都按10k计算。

  交易0表示,某个地址有100k的未花费交易输出(UTXO),向另外两个地址分别转账40k和50k,这样那两个地址就分别有了40k和50k的UTXO。交易1表示,一个含有40k的UTXO的某地址向外转账,除去10k的交易费,接收地址就得到了30k的UTXO。其它的交易依次类推。

  这样,整个系统的收支状态信息都保存在UTXO中。每一个UTXO都由私钥控制,解锁后才能使用。

  这种设计的好处是,有一定的保密性,如果一个用户经常更换地址,外界就不容易判断他的身份。但这对智能合约系统来说,就是不利的地方,因为智能合约需要一个确定的身份来操作。

  它的缺点是会影响区块的尺寸,如果在某个交易中,有1000个交易输入,那就需要1000个解锁,这会造成区块的尺寸增大,尺寸大的区块就需要多的交易费。交易费在这里就是控制因素,使得交易尽量采用少的输入。

  它还有一个缺点很难精细地控制使用哪些输入,假如要花费5个比特币,有50种排列组合,到底选哪个呢,不易控制。以太坊则没有这个缺点,因为它是采用的账户模型。一个账户对应一个余额。

1.2 以太坊的 Account 交易模型

  在以太坊中采用账户模型,这种设计不易于隐藏身份,通过合约来混淆。这种模型节省空间;实现比较简单。

  DAPP(分布式应用)也需要这种模型,在应用中,合约的发起、调用都需要特定的人来执行。而在比特币中,如果输入比较多,则不易控制。

  历史信息获取也比较简单,可以只检查更新的部分。同时签名验证次数少,不像比特币要依赖输入的多少。

2. 以太坊交易的结构

2.1 账户类型

  以太坊中有两种类型的账户:

  外部账户(Externally Owned Accounts 或EOA):被私钥控制,没有与合约代码相关联,有余额。可以发起和签名交易,可以创建合约。

  其地址长度为公钥的Keccak256散列值的最后20个字节。

  合约账户:被合约代码控制,同样有余额。能被外部账户调用来激活,也可以通过另外一个合约账户来激活。

  合约账号一经创建,存在于区块链中。一旦接收到消息,其包含的代码被激活开始运行,它修改全局状态或向其它合约继续发送消息。

2.2 交易的内部结构

交易中的几个参数介绍:

  • To: 交易接收方地址(20Bytes)
  • Value: 交易发送的ether数量(wei)
  • Startgas:交易者愿意花费的最大Gas数量
  • Gasprice: 交易者愿意支付的Gas价格
  • startgas*gasprice = 最终ether数值
  • nonce:交易发起者填写的序列号,防止重放攻击
  • Data:可变长度的二进制数据载荷
  • V,R,S: ECDSA数字签名信息
2.3 注意事项
  • 不要发送到无效地址!这样会丢失以太币。
  • 发往合约账号的交易一般需要符合调用规范,否则会调用合约fallback函数,如果正常则调用并转账到该函数。
  • 地址0用来创建合约,合约编译结果是data。创建合约需要消耗Gas。
  • 专有的销毁以太币地址0xdead,一般用不到。

3. 以太坊交易的生命周期

  这里有一个交易执行过程的例子。如图,有三个节点,Alice节点,Charlie节点,矿工节点。
在这里插入图片描述

交易示例1

在这里插入图片描述
交易示例2

  • Alice发布一笔交易,给Bob转账 1 ether。
  • 交易广播到所有的节点。
  • 矿工节点开始挖矿,赢得竞争后,记录新区块,Alice
    的余额变为 18.98** ether,比 19 少的那部分是交易费,Bob 的余额变为 6
    ether。
  • 矿工将新区块广播出去,其它节点更新区块。

经过若干个区块,Alice 的交易被认为是安全的。

文章发布只为分享区块链技术内容,版权归原作者所有,观点仅代表作者本人,绝不代表区块链兄弟赞同其观点或证实其描述。

Source from:

以太坊交易的学习笔记

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python以太坊交易是指使用Python编程语言进行以太坊区块链上的交易操作。以太坊是一种基于区块链技术的智能合约平台,它允许开发者构建和部署去中心化应用程序(DApps)。 在Python中,可以使用以太坊的官方库web3.py来进行以太坊交易的编程操作。web3.py提供了一系列的API,可以与以太坊节点进行通信,并执行各种操作,包括创建账户、发送交易、查询余额等。 以下是一个简单的Python代码示例,展示了如何使用web3.py库发送以太坊交易: ```python from web3 import Web3 # 连接到以太坊节点 w3 = Web3(Web3.HTTPProvider('https://mainnet.infura.io/v3/your_infura_project_id')) # 设置发送方账户私钥和接收方地址 private_key = 'your_private_key' receiver_address = '0x1234567890abcdef1234567890abcdef12345678' # 构建交易参数 transaction = { 'to': receiver_address, 'value': w3.toWei(1, 'ether'), 'gas': 21000, 'gasPrice': w3.toWei('50', 'gwei'), 'nonce': w3.eth.getTransactionCount(w3.eth.accounts), } # 签名交易 signed_transaction = w3.eth.account.signTransaction(transaction, private_key) # 发送交易 transaction_hash = w3.eth.sendRawTransaction(signed_transaction.rawTransaction) # 等待交易确认 transaction_receipt = w3.eth.waitForTransactionReceipt(transaction_hash) # 打印交易结果 print('交易成功,交易哈希:', transaction_receipt.transactionHash.hex()) ``` 上述代码中,首先使用`Web3`类连接到以太坊节点。然后设置发送方账户的私钥和接收方地址。接下来,构建交易参数,包括接收方地址、转账金额、燃气限制、燃气价格和交易序号。然后使用发送方账户的私钥对交易进行签名,并发送签名后的交易以太坊网络。最后,等待交易被确认,并打印交易结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Shanshan yuan

一个关注于技术与生活的学生

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值