区块链学习——深入浅出智能合约赞助

*又回到一个老生常谈的问题,什么是区块链?*
区块链是一种数据结构,可以把数据按照时间顺序存储在可以无限伸长的链表中,就像一个账本。区块链无中心节点,通过分布式,点对点的计算机网络来维护。区块中包含一定数量的交易,交易代表数据库状态的改变。以时间为轴,第一个块为创世块,然后是下一个区块,接着下一个区块。区块之间存储着交易。实际上就是包括一系列价值的转移,从一个地址到另一个地址。一个地址代表系统中唯一的一个账号。地址上实际是一个公钥,它的对应私钥属于创建账号的那个用户。没有用账户的私钥做数字签名,价值就无法从账户中转移。区块链如同数据库的一样,有ACID的属性。要么交易完成,价值发生了转移,要么交易失败。
在区块链中产生下一个区块,这个节点需要花费大量的算力解决一个数学任务,这个节点是事先未知的。这个节点完成了关于哈希值的计算,找到了问题的解答,就可以命名下一个区块并发布,网络中的其他节点来验证这个区块。由于证明了工作量(POW)赢得发布的节点得到两种奖励,一是获取区块的奖励,二是获得区块中交易费,这个过程被广泛的称为“挖矿”
*以太坊与智能合约*
区块链吸引应用开发人员的主要的性质有:
1.区块链由别人运营,如果你的应用把你的数据存进大家都使用的区块链,它就不需要为数据提供存储机制
2.区块链提供分布共识机制
3.区块链提供匿名机制,一个账号只是一个公钥的地址,与物理世界的人没有关系。
4.价值可以从一个地址传送到另一个地址,而且费用要小于传统的真实货币转账机制。
以太坊采用区块链的原理,又增加了在区块链上创建智能合约:智能合约是一种应用,它能保存价值,存储数据,封装代码,执行计算任务。类似于比特币,以太坊也含有货币,成为以太币,
智能合约允许匿名的己方进入约束协议,每个参与方对交易完全知情。价值可以在账户之间转移,或者放在智能合约第三方托管。由于合约就是代码,开发者想做什么应用,就能做得出,你的想象力是唯一的限制。

*智能合约:智能赞助*
这个智能合约可以让持有的账户的用户做以下互动:
1.一个慈善机构搞募捐,称为受益者thebenefactor;
2.一个赞助实施方为这个慈善机构募捐,称为实施者therunner;
3.想要提供赞助的用户,称为赞助者thesponsor;
4. 一个以太坊区块链的挖矿节点,验证交易,称为矿工theminer。

我们称为智能赞助(smartSponsor)的合约(contract)是:
1.实施者therunner通过一个募捐活动为慈善机构募捐
2.构建合约时,实施者therunner命名接受募捐的受益者thebenefactor
3.实施者therunner然后邀请用户提供赞助,用户调用智能合约的函数(function),这个函数的功能是从赞助者thesponsor的账号转移到以太合约(contract),这些以太沉淀在合约中,直到有回调发生。
4.在合约的整个生命周期,各方都可以看到谁是受益者thebenefactor,募集到了多少以太,从谁到哪儿募捐到。
合约制定了以后,必然会发生俩种现象的其中一种:
1.募捐照计划实施,实施者指示合约把全部募捐者转移给受益者
2.因为某种原因募捐失败,实施者按照合约把赞助者承诺的募捐退还

以太坊允许智能合约用代码定义,代码使用一种solidity的编程语言,这是一种类似java的语言。合约就像java类,区块链交易存储在成员变量中,可以调用智能合约的方法来查询合约,或者改变合约的状态。由于区块链的拷贝分布在网络中所有的节点,任何人可以查询合约来获取合约中的公有信息。
我们合约会包含以下方法:
1.smartSponsor -合约的构造器。它初始化合约的状态。合约的构建者命名账户的地址,这个账户会在合约提款得益。
2.pledge -可以被任何捐献以太的赞助者调用。赞助者可以提供支持募捐的信息,但这个不是必需的。
3.getPot -返回合约中当前的以太坊总量。
4. refund -把承诺的募捐退还给赞助者,只有合约的拥有者可以调用这个方法。
5. drawndown -把合约中的全部募捐转移到受益者的账户,同样,也只有合约的拥有者能够调用这个方法。

我们的想法是合约要有些约束:如果赞助者把以太转移到合约,除非合约退回,否则赞助者不能取回。如此,所有的数据都可以公开,意思是任何能够访问以太坊的人,通过合约的代码,能够看到谁设置了合约,谁是受益者,谁承诺了哪一笔捐款。
重要的是,所有改变合约状态的操作(构建,承诺,退还,或者把合约中全部募捐转移到受益者账户)都需要在区块链中创建交易。这就意味着,交易“被挖矿”和区块“被存储”以前,数据还没有被存储。有些操作只是读取已经存在的合约状态(getPot或者读取公共成员变量),这些操作不需要挖矿。这点重要而微妙:写操作很慢(我们必须等到挖矿成功),或许写操作结果最终进不了区块链(如果你的代码抛出一个异常或者有其他的错误),需要调用者给矿工干活的激励。这在以太坊语称为gas。所有写操作需要支付gas来改变区块链的状态。
我们有幸不需要加入以太坊和购买以太,就能使用相同的软件,配置一个本地测试区块链,运行一个矿工来产生自己所为的以太。
代码与注释见——智能合约赞助代码

猜你喜欢

转载自blog.csdn.net/qq_36344771/article/details/81092630