http://www.7klian.com

如安在以太坊智能合约中集成可证明的Oracle-part1详解


2import "./SafeMath.sol";
50 uint16 leaseDepositUsd,
3. monthAmountUsd:每月要付出的总金额(美元)

68 uint amountCollected
truffle init
大括号可以让我们快速回到事情目次,这是一个不错的小能力。打开LeaseGenerator.sol
8. leaseDepositPaid:奉告是否已付出租赁押金

4. 智能合约通过利用Provable(可证明) Oracle提供的转换数据将发送的以太币金额转换为美元,从而确生存款和每月付款额。
22 }
2. 房东通过智能合约建设租约,并提供条款和租户的以太坊地点。所有金额均以美元暗示。
10.在package.json内部,利用以下呼吁建设剧本条目:

让我们通过一个示例来研究一下。也许您是房东,而且但愿以安详靠得住的方法收取押金和租金。在本教程中,我们将为房东建设一种为租户草拟租约的要领。运作方法如下:

24 State workingState;
83 uint transferAmount,
49 uint16 monthlyAmountUsd,

truffle-config.js

networks: {

第46-85行声明白所有可以执行的行动的事件。相应的行动完成后,将触发每个事件。在dApp中,此类事件对付前端代码响应和更新UI很有用。


从本质上讲,智能合约是自包括的代码剧本,这意味着它们本质上无法会见外部信息,譬喻Web API或文件系统。这有一个很好的来由:以太坊的环境全都与确定性和可验证的数据有关。
module.exports = {
23

10 address payable tenantAddress;
}
74 );
56 event leaseDepositPaid(
64 );
1.安装NodeJS,会见其官方网站或利用HomeBrew安装。



在这里,我们指定Truffle将利用哪些网络来陈设智能合约。development是一个非凡的要害字,汇报Truffle这是默认网络。填写适当的主机和端口。Provide*对付network\u id.solc是一个solidity的编译器, 确保solc的版本配置为0.5.17。在撰写本文时,最新版本的Solidity为0.6.4。由于Provable尚未提供0.6兼容性,因此我们利用的是0.5系列的最新版本。
35 bool leaseFullyPaid;
53 bool leaseFullyPaid,
第12行存储了ETH到USD的汇率。每当我们从oracle中检索新汇率时,将配置此变量。
13 uint tenantPayment;
19 collectingLeaseDeposit,
4. leaseDepositUsd:要付出的租赁押金的代价
network_id: "*",

}
67 address tenantAddress,
cd leaseGenerator
code .
npm install -g ganache-cli
5. leasePaymentWindowSeconds:租户每月付出的时间(以秒为单元),在租户付出了租赁押金后生效
80 );
85 );

不然每个以太坊节点将无法就当前状态告竣共鸣。互联网是具有不确定性因素,因为它跟着时间的推移而改变。从外部资源(如比特币价值标签)检索数据可以并且凡是会返回差异的功效。这就给我们留下了一个问题,我们如何将非确定性数据聚合到诸如智能合约之类简直定脾性况中?
52 bool leaseDepositPaid,
38 mapping (bytes32 => bool) validIds;
54 );

port: 8546,
npm install -g truffle
3.为项目建设一个新目次并输入。

在我们必需编辑truffle设置文件以满意我们的开拓情况,由于我们仅在当地举办开拓,因此设置很是简朴。打开truffle-config.js,删除内容并编写以下内容:

5contract LeaseGenerator is usingProvable {
44 }
对房东来说,独一的风险是以太坊的代价大概在租赁期内下降。在这种环境下,必需在智能合约中存入更多以太坊,以满意租户的押金退款条件。
第7行声明我们对uint变量范例利用SafeMath。这使我们可以将.add或.sub等添加到任何uint范例,以举办简朴,安详的算术运算。
“Provable”(以前称为“Oraclize”)是一种称为“oracle”的处事,专门为办理此问题而构建。oracle通过聚合来自外部源(如随机数生成器、价值标签和计较引擎)的数据来充傍边继器。一旦收集到数据,,oracle就会将其输入智能合约。
依赖库

12 uint ETHUSD;

},
18 payingLease,
71 event leaseDepositReclaimed(

6
brew install node
78 uint numberOfmonths,
9 address payable landlordAddress;

"bridge": "./node_modules/.bin/ethereum-bridge -a 9
您大概想知道,第三方中继器是否会粉碎数据分手化的目标?好吧,你是绝对正确的。因此,Provable实施了真实性证明的观念。利用安详加密技能,我们可以验证通过的信息没有有被原始来历改动。因此可以相信oracle将确定性功效通报给确定脾性况。


11

39 mapping (address => Lease) tenantLease;
},
48 uint8 monthsPaid,
设置Truffle
package-lock.json
57 address tenantAddress,
mkdir leaseGenerator
28 uint8 monthsPaid;
81
45
69 );
chain在指定的主机和端口上启动ganache-cli的当地实例。defaultBalanceEther为每个帐户配备10,000的初始余额,这最终将很是有用。--db配置存储位置以保存ganache的数据,从而使我们下次运行启动呼吁时可以从头实例化同一实例。
3import "./provableAPI.sol";

5.建设package.json和package-lock.json

7. depositPaymentWindowEnd:租户举办租赁押金为Unix时间戳的截至日期
6. leasePaymentWindowEnd:租户付出租约为Unix时间戳的截至日期
17 payingLeaseDeposit,
58 uint amountSentUsd
第9行声明白应付地点的范例变量,个中包括房东的以太坊地点。应付账款是确保可以将资金发送到该地点。
55
7. 房东可以随时存放以太币并提取租金收入。
25

npm install
6.安装ganache-cli,这是一个模仿以太坊的当地测试区块链。
2.确保是在全局模式下安装truffle。打开呼吁行或终端:
59 );

4.初始化系统truffle项目。
1. 房东和房客本人就租赁条款告竣一致(即每月$1000,共6个月,另加按金$500。每次付款应在每月的第一天付出)。

82 event fundsWithdrawn(
第2至3行导入了我们的依赖库。
1. numberOfMonths:租约的期限,以月为单元

"Must be the landlord to create a lease");
第13行用于配置wei中的租户发送的押金或月租付款额。然后用于计较等价的美元金额,以更新智能合约的状态。
79 uint monthsPaid
搭建情况

7.确保安装了文本编辑器(我更喜欢Visual Studio Code),然后在编辑器中打开项目。
第39行将租户映射到租约。当房东建设租约时,给定的租户地点将参考新的租约实例存储在此处,以便在执行租约操纵时可以将其检索到。
第10行声明白应为该租户另一个address payable。每当给定的租户执行某项操纵(譬喻付出租赁押金)时,城市更新此变量。


第26–36行声明Lease工具及其所有属性。当房东抉择建设新租约时,会建设一个新的Lease实例。特性:
留意:这是一其中级教程。发起您对Ethereum、javascript、Solidity和Truffle框架有根基的相识,但并非完全须要。另外,本指南相当冗长。与往常一样,将逐行表明代码以确保正确领略。
63 uint amountSentUsd
42 require(msg.sender == landlordAddress,
./ganache/"
31 uint32 leasePaymentWindowSeconds;
(cd contracts && touch LeaseGenerator.sol)
32 uint64 leasePaymentWindowEnd;
1pragma solidity ^0.5.17;
21 idle

26 struct Lease {
8.文件/文件夹布局将如下所示:
76 event leaseFullyPaid(
47 uint8 numberOfMonths,
host: "127.0.0.1",


8
4
9. leaseFullyPaid:奉告整个租赁是否已全额付出

-H 127.0.0.1 -p 8546 --dev",
9.此刻安装ethereum-bridge,该软件答允我们在当地开拓区块链上利用Provable,而无需将智能合约陈设到实际网络中。
migrations/
46 event leaseCreated(

npm install ethereum-bridge
// if using VS code:
contracts/

bridge认真启动以太坊桥。-a符号指定在我们的当地域块链上利用哪个帐户来陈设Provable毗连器智能合约,从而答允我们断绝的当地项目与网络的其余部门举办通信。然后我们传入运行区块链的主机和端口。--dev模式只是加速了内部桥接任务的速度,从而加速了开拓速度。
该项目依赖于两个库SafeMath和provableAPI。在/ contracts中建设2个新的.sol文件,并复制每个库的源。
第1行是每个新dApp项目标开始。全球的以太坊开拓人员应该珍惜这一刻,以此作为新起点的象征。不要轻视在文件顶部声明solidity版本的重要性!
5. 租约完成后,租户可以收回押金。
14 uint leaseBalanceWei;
当或人乐成宣布智能合约时,它将每台呆板上执行维护区块链完整副本。重要的是,此执行在所有计较机上均应保持一致,以便每次都发生沟通的功效。
36 }

37
version: "0.5.17",
40
}
27 uint8 numberOfMonths;
test/
41 modifier onlyLandlord() {
34 bool leaseDepositPaid;

62 address tenantAddress,
npm init -y





2. monthsPaid:租户付出的总月数
16 enum State {

"scripts": {
第38行存储了ID的映射。每次建设新的oracle查询时,城市返回独一的ID。该ID被添加到__callback()所利用的映射中,以确保每个查询仅被处理惩罚一次。
第16-22行暗示一个列举范例,它本质上是一个自界说范例,可以是大括号中列出的任何值。第24行将workState声明为具有上面我们声明的State范例的变量。对付执行的每个操纵(譬喻付出定金),城市更新workingState以反应该状态。譬喻假如租户要付出租赁押金,我们会将workingState更新为payingLeaseDeposit。目标是为oracle提供相关信息。oracle收到一些请求的数据后,它会触发一个回调函数__callback(),该函数使我们可以自界说处理惩罚传入数据的方法。这将完全取决于workingState的值。假如我们要付出LeaseDeposit,则回调函数会指示您付出租赁押金。
compilers: {
"chain": "ganache-cli -p 8546 --defaultBalanceEther 10000 --db
61 event leasePaymentPaid(
此刻我们已经设置好了情况信息,是时候开始编写智能合约了。导航到/ contracts并建设LeaseGenerator.sol

solc: {

第5行打开了一个新智能合约,该智能合约担任自usingProvable,个中包括举办数据查询的所有逻辑。




33 uint64 depositPaymentWindowEnd;
第41-44行声明一个修饰符。我们会把这个附加到我们只想被房东挪用的函数中。假如一个随机的人可以把智能合约里的钱都掏空,那就没有意义了,对吧?
43 _;
75
7 using SafeMath for uint;
package.json
51 uint32 leasePaymentWindowSeconds,
3. 租户将初始押金发送到智能合约,智能合约划定了首笔每月租赁付款的期限。
65
29 uint16 monthlyAmountUsd;

60

20 reclaimingLeaseDeposit,
70
66 event leaseDepositCollected(
84 uint leaseBalanceWei
租赁发生者智能合约
77 address tenantAddress,


}
development: {

6. 假如租户未能在期限前每月付款,则房东可以充公押金。
86}
15

30 uint16 leaseDepositUsd;
73 uint amountReclaimed
72 address tenantAddress,

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

相关文章阅读