“Must be the landlord to create a lease”);
“bridge”: “./node_modules/.bin/ethereum-bridge -a 9
第12行存储了ETH到USD的汇率。每当我们从oracle中检索新汇率时,将配置此变量。
24 State workingState;
2. monthsPaid:租户付出的总月数
57 address tenantAddress,
5. leasePaymentWindowSeconds:租户每月付出的时间(以秒为单元),在租户付出了租赁押金后生效
设置Truffle
37
6. 假如租户未能在期限前每月付款,则房东可以充公押金。
22 }
第41-44行声明一个修饰符。我们会把这个附加到我们只想被房东挪用的函数中。假如一个随机的人可以把智能合约里的钱都掏空,那就没有意义了,对吧?
第1行是每个新dApp项目标开始。全球的以太坊开拓人员应该珍惜这一刻,以此作为新起点的象征。不要轻视在文件顶部声明solidity版本的重要性!
}
npm install -g truffle
package.json
67 address tenantAddress,
第39行将租户映射到租约。当房东建设租约时,给定的租户地点将参考新的租约实例存储在此处,以便在执行租约操纵时可以将其检索到。
26 struct Lease {
npm install -g ganache-cli
bridge认真启动以太坊桥。-a符号指定在我们的当地域块链上利用哪个帐户来陈设Provable毗连器智能合约,从而答允我们断绝的当地项目与网络的其余部门举办通信。然后我们传入运行区块链的主机和端口。–dev模式只是加速了内部桥接任务的速度,从而加速了开拓速度。
4. 智能合约通过利用Provable(可证明) Oracle提供的转换数据将发送的以太币金额转换为美元,从而确生存款和每月付款额。
78 uint numberOfmonths,
4.初始化系统truffle项目。
“Provable”(以前称为“Oraclize”)是一种称为“oracle”的处事,专门为办理此问题而构建。oracle通过聚合来自外部源(如随机数生成器、价值标签和计较引擎)的数据来充傍边继器。一旦收集到数据,oracle就会将其输入智能合约。
7 using SafeMath for uint;
43 _;
}
80 );
55
39 mapping (address => Lease) tenantLease;
65
44 }
第13行用于配置wei中的租户发送的押金或月租付款额。然后用于计较等价的美元金额,以更新智能合约的状态。
依赖库
./ganache/”
84 uint leaseBalanceWei
62 address tenantAddress,
在我们必需编辑truffle设置文件以满意我们的开拓情况,由于我们仅在当地举办开拓,因此设置很是简朴。打开truffle-config.js,删除内容并编写以下内容:
28 uint8 monthsPaid;
35 bool leaseFullyPaid;
8
71 event leaseDepositReclaimed(
第46-85行声明白所有可以执行的行动的事件。相应的行动完成后,将触发每个事件。在dApp中,此类事件对付前端代码响应和更新UI很有用。第10行声明白应为该租户另一个address payable。每当给定的租户执行某项操纵(譬喻付出租赁押金)时,城市更新此变量。
从本质上讲,智能合约是自包括的代码剧本,这意味着它们本质上无法会见外部信息,譬喻Web API或文件系统。这有一个很好的来由:的环境全都与确定性和可验证的数据有关。
77 address tenantAddress,
让我们通过一个示例来研究一下。也许您是房东,而且但愿以安详靠得住的方法收取押金和租金。在本教程中,我们将为房东建设一种为租户草拟租约的要领。运作方法如下:
50 uint16 leaseDepositUsd,
34 bool leaseDepositPaid;
56 event leaseDepositPaid(
8.文件/文件夹布局将如下所示:
15
truffle-config.js
第16-22行暗示一个列举范例,它本质上是一个自界说范例,可以是大括号中列出的任何值。第24行将workState声明为具有上面我们声明的State范例的变量。对付执行的每个操纵(譬喻付出定金),城市更新workingState以反应该状态。譬喻假如租户要付出租赁押金,我们会将workingState更新为payingLeaseDeposit。目标是为oracle提供相关信息。oracle收到一些请求的数据后,它会触发一个回调函数__callback(),该函数使我们可以自界说处理惩罚传入数据的方法。这将完全取决于workingState的值。假如我们要付出LeaseDeposit,则回调函数会指示您付出租赁押金。
1. 房东和房客本人就租赁条款告竣一致(即每月$1000,,共6个月,另加按金$500。每次付款应在每月的第一天付出)。
1pragma solidity ^0.5.17;
4. leaseDepositUsd:要付出的租赁押金的代价
在这里,我们指定Truffle将利用哪些网络来陈设智能合约。development是一个非凡的要害字,汇报Truffle这是默认网络。填写适当的主机和端口。Provide*对付network\u id.solc是一个solidity的编译器, 确保solc的版本配置为0.5.17。在撰写本文时,最新版本的Solidity为0.6.4。由于Provable尚未提供0.6兼容性,因此我们利用的是0.5系列的最新版本。
8. leaseDepositPaid:奉告是否已付出租赁押金
54 );
42 require(msg.sender == landlordAddress,
搭建情况
租赁发生者智能合约
compilers: {
第5行打开了一个新智能合约,该智能合约担任自usingProvable,个中包括举办数据查询的所有逻辑。
留意:这是一其中级教程。发起您对Ethereum、javascript、Solidity和Truffle框架有根基的相识,但并非完全须要。另外,本指南相当冗长。与往常一样,将逐行表明代码以确保正确领略。
81
7.确保安装了文本编辑器(我更喜欢Visual Studio Code),然后在编辑器中打开项目。
29 uint16 monthlyAmountUsd;
当或人乐成宣布智能合约时,它将每台呆板上执行维护完整副本。重要的是,此执行在所有计较机上均应保持一致,以便每次都发生沟通的功效。
23
38 mapping (bytes32 => bool) validIds;
60
75
85 );
32 uint64 leasePaymentWindowEnd;
solc: {
test/
},
6
6. leasePaymentWindowEnd:租户付出租约为Unix时间戳的截至日期
host: “127.0.0.1”,
51 uint32 leasePaymentWindowSeconds,
36 }
25
69 );
version: “0.5.17”,
13 uint tenantPayment;
}
第7行声明我们对uint变量范例利用SafeMath。这使我们可以将.add或.sub等添加到任何uint范例,以举办简朴,安详的算术运算。
5.建设package.json和package-lock.json
module.exports = {
83 uint transferAmount,
45
33 uint64 depositPaymentWindowEnd;
9.此刻安装ethereum-bridge,该软件答允我们在当地开拓区块链上利用Provable,而无需将智能合约陈设到实际网络中。
第9行声明白应付地点的范例变量,个中包括房东的以太坊地点。应付账款是确保可以将资金发送到该地点。
21 idle
“scripts”: {
该项目依赖于两个库SafeMath和provableAPI。在/ contracts中建设2个新的.sol文件,并复制每个库的源。
2. 房东通过智能合约建设租约,并提供条款和租户的以太坊地点。所有金额均以美元暗示。
82 event fundsWithdrawn(
},
61 event leasePaymentPaid(
40
72 address tenantAddress,
16 enum State {
network_id: “*”,
31 uint32 leasePaymentWindowSeconds;
19 collectingLeaseDeposit,
第38行存储了ID的映射。每次建设新的oracle查询时,城市返回独一的ID。该ID被添加到__callback()所利用的映射中,以确保每个查询仅被处理惩罚一次。
“chain”: “ganache-cli -p 8546 –defaultBalanceEther 10000 –db
// if using VS code:
}
migrations/
70
64 );
9 address payable landlordAddress;
3.为项目建设一个新目次并输入。
59 );
53 bool leaseFullyPaid,
68 uint amountCollected
86}
58 uint amountSentUsd
不然每个以太坊节点将无法就当前状态告竣共鸣。互联网是具有不确定性因素,因为它跟着时间的推移而改变。从外部资源(如价值标签)检索数据可以并且凡是会返回差异的功效。这就给我们留下了一个问题,我们如何将非确定性数据聚合到诸如智能合约之类简直定脾性况中?
74 );
30 uint16 leaseDepositUsd;
contracts/
10 address payable tenantAddress;
您大概想知道,第三方中继器是否会粉碎数据分手化的目标?好吧,你是绝对正确的。因此,Provable实施了真实性证明的观念。利用安详加密技能,我们可以验证通过的信息没有有被原始来历改动。因此可以相信oracle将确定性功效通报给确定脾性况。
76 event leaseFullyPaid(
npm init -y
20 reclaimingLeaseDeposit,
development: {
3. 租户将初始押金发送到智能合约,智能合约划定了首笔每月租赁付款的期限。
7. depositPaymentWindowEnd:租户举办租赁押金为Unix时间戳的截至日期
code .
66 event leaseDepositCollected(
47 uint8 numberOfMonths,
2import “./SafeMath.sol”;
4
brew install node
1.安装NodeJS,会见其官方网站或利用HomeBrew安装。
2.确保是在全局模式下安装truffle。打开呼吁行或终端:
chain在指定的主机和端口上启动ganache-cli的当地实例。defaultBalanceEther为每个帐户配备10,000的初始余额,这最终将很是有用。–db配置存储位置以保存ganache的数据,从而使我们下次运行启动呼吁时可以从头实例化同一实例。
18 payingLease,
73 uint amountReclaimed
对房东来说,独一的风险是以太坊的代价大概在租赁期内下降。在这种环境下,必需在智能合约中存入更多以太坊,以满意租户的押金退款条件。
27 uint8 numberOfMonths;
12 uint ETHUSD;
mkdir leaseGenerator
79 uint monthsPaid
17 payingLeaseDeposit,
npm install ethereum-bridge
package-lock.json
第26–36行声明Lease工具及其所有属性。当房东抉择建设新租约时,会建设一个新的Lease实例。特性:
7. 房东可以随时存放以太币并提取租金收入。
48 uint8 monthsPaid,
npm install
此刻我们已经设置好了情况信息,是时候开始编写智能合约了。导航到/ contracts并建设LeaseGenerator.sol
port: 8546,
41 modifier onlyLandlord() {
cd leaseGenerator
11
6.安装ganache-cli,这是一个模仿以太坊的当地测试区块链。
5. 租约完成后,租户可以收回押金。
networks: {
46 event leaseCreated(
5contract LeaseGenerator is usingProvable {
52 bool leaseDepositPaid,
(cd contracts && touch LeaseGenerator.sol)
大括号可以让我们快速回到事情目次,这是一个不错的小能力。打开LeaseGenerator.sol
63 uint amountSentUsd
14 uint leaseBalanceWei;
truffle init
-H 127.0.0.1 -p 8546 –dev”,
1. numberOfMonths:租约的期限,以月为单元
3import “./provableAPI.sol”;
3. monthAmountUsd:每月要付出的总金额(美元)
49 uint16 monthlyAmountUsd,
9. leaseFullyPaid:奉告整个租赁是否已全额付出
第2至3行导入了我们的依赖库。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。