青年下载站
首页 > 区块链 > 区块链百科 > 

区块链基本概念:什么是交易?

作者:佚名 来源:青年下载站 2023-11-21 21:14:24

什么是区块链交易?

是指导致以太坊状态或数据发生变化的操作

所以在以太坊上,哪些行为是交易呢?

转账:转账会导致账户余额发生变化

部署合约:从没有合约到有合约,链上数据发生变化

执行合约的写方法:合约中的有些方法会导致链上数据发生变化,执行这一类方法就是交易;但是另一类方法不会导致链上数据发生变化,比如view,pure关键字修饰的方法,就不算交易。

下图是从区块链浏览器查看合约的写方法,由于交易是要花gas费的,所以需要先连接钱包,才能调用这些写方法发起交易:

区块链交易的特点

交易有这些特点:

必须要有一个账户发起者(该账户要有一定数量的以太币)

必须要消耗一定数量的gas

必须要得到矿工的打包和确认才能生效

交易发起后,会有一个交易hash,用于跟踪交易情况

如果你使用web3j发起交易,有两个方法:

eth_sendTransaction:发起交易,节点帮助签名

eth_sendRawTransaction:发起签名交易,需要自己手动签名

调用时,有7个参数,如下一一说明:

from:发起交易的账户地址

to:转账时代表转账地址,部署合约时不需要,调用合约方法时是指定的合约地址

gasLimit:可选,设定gas的上限

gasPrice:可选,设定gas的价格

value:转账时代表转账的数量,部署合约和调用合约方法时不需要

data:转账时不需要,部署合约时是合约的编码,调用合约方法时是方法编码

nonce:可选,交易发起者发起交易的次数

整个区块链是一个分布式数据库,而这个数据库数据的变化,就是由一笔一笔交易产生的,一些重点的日志会通过event的形式记录在区块链上。

就是通过对每一笔交易的记录,以太坊的数据变化就是可追溯的,所以数据就可以成为资产,使得数字世界也能实现现实世界同样的逻辑。

区块链浏览器的交易怎么看?

当成功发起一笔交易,得到交易hash之后,可以在区块链浏览器查看交易执行情况,比如这笔哈希:0x9983196bc1a9ab71d4286a90d814726c4b989269f44b76608d4191f82ea72a44

直接在搜索框中搜索这个交易哈希,就可以看到交易详情:

 

Transaction Hash: 这是交易哈希

Status: 状态,成功

Block: 交易区块编号,因为区块链是由一个一个的区块组成,一个区块打包完就会生成新的区块,并在新的区块交易,编号是递增的

Timestamp: 交易时间

From: 交易发起方的地址,是指谁发起的交易,扣gas费也是扣的这个地址的钱

Interacted With (To): 交易接收方地址,如果是合约就是合约地址,如果是钱包就是钱包地址,很多人会搞混,觉得这个参数就是钱最终去的地方,不是的;如果是转账交易,那这个地址自然是钱包去的地方,如果是闪兑,那还需要看代币转移的具体细节,也就是下一个⬇️

Tokens Transferred: 交易中涉及到的代币转移,也就是交易细节,这个例子中有两笔,一笔是从发起方转移到pancakePair,转移33.395的BUSD,一笔是从pancakePair转移到发起方,转移7860.775719049526006993的MHB代币,所以可以看到这个地址在使用BUSD购买MHB

这里再打个比喻说一说交易细节,如果我要拿USDT从对方手里购买ETH

(1)如果直接购买,我就需要把控好所有交易细节:

那发起交易的人(From)是我

发起交易的对象(To)就是对方

那么这笔交易就涉及了两笔代币转移:USDT从我这里转移到对方那里,ETH从对方那里转移到我这里

(2)如果我要通过代理方,假如代理方是过钱的,那就是这样:

那发起交易的人(From)是我

发起交易的对象(To)就是代理方

那么这笔交易就涉及了三笔代币转移:我把USDT转给代理方,代理方把USDT转移到对方那里,对方把ETH转移到我这里

(3)如果代理方是不过钱的,那就是这样:

那发起交易的人(From)是我

发起交易的对象(To)就是代理方

那么这笔交易就涉及了两笔代币转移:通过代理方撮合,我把USDT转移到对方那里,对方把ETH转移到我这里

上面的交易采用第三种方式,代理方就是PancakeswapRouter合约,对方就是PancakePair合约,它的好处就是把交易细节交给代理方把控,同时又做到点对点直接交易节省成本,去中心化交易所基本都是采用这种方式。

所以,你看,花钱的是我,收钱的是对方,但是交易对象To可能是代理方,所以To不一定是收钱的人。

再继续看剩下的部分:

 

Value: 交易转移的代币数量(指的是链的原生代币,BSC链是BNB),这是直接转账,这个就是转给To地址的原生代币数量。

从这个值看来,To也算是收钱的,是指收的这个钱,只是一般除了转账交易,其他的交易这个值都是0。

Transaction Fee: 交易花掉的gas费,等于交易使用的gas数目*gas价格

Gas Limit: 交易设定的最大gas数目

Gas Used by Transaction: 交易使用的gas数目,不会超过最大gas数目

Gas Price: gas价格,代表每一个gas的BNB价格

Nonce: 交易方发起交易的数目 / 当前区块该交易的编号

Input Data: 交易输入数据

下面的这一部分,最重要的是看看交易产生的费用,gas费,还有gas limit这些。

每一次交易还会伴随着一些日志,日志也会永久的记录在区块链上,在智能合约里,是通过发射事件的方式来记录日志。
 

Value: 交易转移的代币数量(指的是链的原生代币,BSC链是BNB),这是直接转账,这个就是转给To地址的原生代币数量。

从这个值看来,To也算是收钱的,是指收的这个钱,只是一般除了转账交易,其他的交易这个值都是0。

Transaction Fee: 交易花掉的gas费,等于交易使用的gas数目*gas价格

Gas Limit: 交易设定的最大gas数目

Gas Used by Transaction: 交易使用的gas数目,不会超过最大gas数目

Gas Price: gas价格,代表每一个gas的BNB价格

Nonce: 交易方发起交易的数目 / 当前区块该交易的编号

Input Data: 交易输入数据

下面的这一部分,最重要的是看看交易产生的费用,gas费,还有gas limit这些。

每一次交易还会伴随着一些日志,日志也会永久的记录在区块链上,在智能合约里,是通过发射事件的方式来记录日志。
 

这个交易有5个日志,代表这个交易从开始到结束,执行过程中,发出过五次事件(在交易中,一般非常重要的动作,都会记录日志,比如授权,转账,等等),当然在智能合约中并没有限制要发什么日志,这是一种约定俗成。

本次交易的5个日志分别是——

转账,将USDT转给对方(PancakePair合约):

授权,授权对方(PancakePair合约)可以操作交易方的USDT

转账,从对方(PancakePair合约)向交易方转MHB

同步,是对方(PancakePair合约)内部的事件,在池子发生变化之后,就要同步底池的参数

交换,也是对方(PancakePair合约)内部的事件,交易成功后会发出交换事件

 

这些日志都记录了关键的,容易产生安全问题的事件,所以关注这些交易日志,可以很好的跟踪合约的安全。

其他

还有一些初学者,交易一提交,拿到hash就万事大吉,其实不是的,并不是说拿到hash了,这笔交易就会成功,有可能也有失败的:

所以就需要你去区块链查看这笔hash,确认它是真的执行成功了,才算是交易成功。

网友评论
评论:
返回顶部