您的位置:首页 > 游戏 > 游戏 > IV 无规矩不成方圆,区块链的“规矩”是怎么起作用的?

IV 无规矩不成方圆,区块链的“规矩”是怎么起作用的?

2024/12/22 16:48:47 来源:https://blog.csdn.net/weixin_44778151/article/details/142296093  浏览:    关键词:IV 无规矩不成方圆,区块链的“规矩”是怎么起作用的?

大家好啊,我是豆小匠。

通过前面几期,我们知道区块链是一种非中心化的解决方案,没有“中央处理器”。

那么,区块链中的各种操作,比如转账、状态记录等规则是怎么定义,又是怎么起作用的呢?

本期主角 – “智能合约”(也叫智能合同)


1、智能合约是什么

区块链是一种分布式数据库,但是光有数据是不够的,我们还需要区块链自带数据的流转规则。

img

智能合约就是这个流转的规则, 它们可以表示各个参与方之间的协议。

智能合约的所有条款和条件都以编程方式定义。 定义将为区块链的参与者指定规则、要求和奖励。 它还会指定如何在各参与方之间传输数字资产。

因此从本质上讲,智能合约是一段程序,存储在区块链中,不可更改(但是可以升级合约)。

智能合约将自行运行,发送事件来触发状态转换,并调用函数。 它们非常适用于区块链技术,因为素不相识的人们可以通过它们按照指定的安全方式开展业务,而不需要任何中间商。


2、简单的智能合约示例

以以太坊(Ethereum)为例,它是全球首个可编程的区块链。可以通过它来定义智能合约,使用的语言是Solidity。

这里我们浅尝辄止,大概看下智能合约的组成部分:

pragma solidity >0.7.0 <0.8.0;contract Marketplace {address public seller;address public buyer;mapping (address => uint) public balances;event ListItem(address seller, uint price);event PurchasedItem(address seller, address buyer, uint price);enum StateType {ItemAvailable,ItemPurchased}StateType public State;constructor() public {seller = msg.sender;State = StateType.ItemAvailable;}function buy(address seller, address buyer, uint price) public payable {require(price <= balances[buyer], "Insufficient balance");State = StateType.ItemPurchased;balances[buyer] -= price;balances[seller] += price;emit PurchasedItem(seller, buyer, msg.value);}
}

这是一个市场商品购买的合约,参与方是seller和buyer,他们的钱包金额保存在balances里。

代码从上往下解析:

  • 定义:

  • 三个状态变量:buyersellerbalances

  • 两个事件:ListItemPurchasedItem

  • 一个具有两个值的枚举:ItemAvailableItemPurchased

  • 构造函数将卖方用户指定为 msg.sender,并将初始状态设置为 ItemAvailable。 创建合约时,将调用此构造函数。

  • buy 函数有三个参数:seller``buyerprice。 这要求买方有足够的购买能力。 然后,它将资金从买方转移到卖方,并最终发出一条消息。


3、智能合约的执行流程

同样是用以太坊为例,合约制定人在编写完合约后,可以在以太坊部署(需要支付一定的手续费:“Gas”费用),剩下的就等待用户或者其他合约的调用触发,执行逻辑。

img

需要知道的是,合约一旦部署,代码和执行的结果无法被更改。也就是说即使合约出现bug,所产生的记录也是无法回滚的,只能通过其他手段做补偿机制,或者根本无法挽回。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com