5.以太坊php web3:为网站增加以太币支付功能

正文开始

[md]

在应用中生成密钥对和账户有很多用处,例如,用户可以用以太币在我们的网站上购买商品或服务 —— 为每一笔订单生成一个新的以太坊 地址,让用户支付到该地址,然后我们检查该地址余额即可了解订单 的支付情况,进而执行后续的流程。

为什么不让用户直接支付到我们的主账户?

稍微思考一下你就明白,创建一个新地址的目的是为了将支付与订单 关联起来。如果让用户支付到主账户,那么除非用户支付时在交易数据 里留下对应的订单号,否则你无法简单的确定收到的交易与订单之间的 关系,而不是所有的钱包软件—— 例如coinbase —— 都支持将留言包含 在交易里发送到链上。

解决方案如下图所示:

当用户选择使用以太币支付一个订单时,web服务器将根据该订单的订单号 提取或生成对应的以太坊地址,然后在支付页面中展示该收款地址和对应二维码(方便某些用户使用扫码支付)。

用户使用自己的以太坊钱包向该收款地址支付以太币。由于网站的支付处理 进程在周期性地检查该收款地址的余额,一旦收到足额款项,支付处理进程 就可以根据收款地址将对应的订单结束,并为用户开通对应的服务。

状态与交易

在这一部分,我们将学习如何使用php向以太坊提交交易,具体包括如下内容:

了解以太坊状态机的概念 理解普通交易与裸交易的区别 提交普通交易 提交裸交易 理解交易收据的作用

可以把以太坊视为一个分布式状态机,交易则是以太坊发生状态迁移的 原因,也就是说,交易总是以修改状态为目的。以太坊中包含成千上万 的状态,账户余额就是其中最著名的一个:

在以太坊中,外部应用可以向节点提交两种交易:普通交易和裸交易。 普通交易由节点签名,而裸交易则由外部应用负责签名。相应的,这两种 交易需要调用不同的接口进行提交。

由于共识机制,向节点提交的交易不会立刻生效,最理想的情况下是被 矿工置入下一个新块。因此交易提交后还需要耐心等待交易收据。

状态与激励

如果你把时间想像成离散的,就容易理解什么是状态:

简单的说,状态就是某一个时刻你对所关注的世界的抽象表达的确定值, 而这个值,随时间的延伸或外部的影响可能发生变化。

不同的人眼中有不同的世界,因此也会有不同的抽象表达。例如,如果 我们关注花有没有开,那么我们对这个世界的抽象表达使用一个布尔变量 就够了:在t1 ~ t4,状态的值都是false,而t5和t6时,状态的值则是true, 剔除时间的因素,可以用下面的状态迁移图来压缩表示:

显然,我们关注的世界从一个状态迁移到另一个状态,一定有其原因, 例如,充分的光照。导致状态迁移的原因,在状态迁移图中标注为激励:

有限数量的状态与激励引起的状态迁移,这种模型在计算机领域被称为 有限状态机(FSM),而有限状态机正是以太坊的核心计算模型。

以太坊状态机

以太坊将世界抽象为数量巨大的状态节点,而交易则是导致这些状态节点 的值发生变化的激励。

例如,某个账户的余额就是一个状态节点,它的值在某个时刻是确定的, 如果其他人向该账户发起转账交易,那么在下一个时刻,这个状态节点 旳值就会更新为新的值:

以太坊采用一种树形数据结构来保存所有的状态节点,该状态树的根节点则 和交易记录一起保存在区块中。在每一个区块都对应着一棵状态树,它代表着世界在那个时刻的确定状态 —— 一个快照。

容易理解,状态可以从交易推演出来。例如,要得到一个账户的余额,只需要把该账户所有的转账交易汇总在一起就可以得出。但以太坊通过使用状态树来表征交易的结果,使得这一查询可以迅速完成。

下一篇:获取账户余额

正文结束

1.以太坊php web3 在windows10下调试——ganache工具的安装 【hi 以太坊】 8.以太坊php web3-智能合约概述