
在2018年4月,Waves团队展示了其尚未完成的智能合约。
过了一会儿,当Waves黑客马拉松宣布时,我认为是时候沉浸于新技术了。 在切下部分,您将找到有关在黑客马拉松比赛中获得第三名的智能合约的详细信息。
本文对开发人员实现自己的智能合约并熟悉技术很有帮助。
主意
该项目的目的是根据所执行的工作,自动使用Github分配软件开发人员的薪水。 主要任务是智能合约同时解决的任务,这使我们摆脱了对资金分配程序的信任,甚至允许没有编程技能的用户在转移资金之前验证资金的正确分配
技术栈
HTML和JavaScript(Node.js Waves
库 ),在GitHub上
开源 ,并在Firebase Hosting上
演示该项目过程
- 用户选择GitHub存储库并确定工资总额
- 用户支付0.01 Waves(约0.02美元)以将数据保存在区块链上并创建智能合约
- 用户检查数据的正确性,然后将薪水金额转移到智能合约的地址
- 开发商之间共享工资
发展历程
对于新手开发人员来说,最好的入门点是
演示控制台 ,该
控制台包含一个很好的示例和一个用于测试代码的控制台。 在开发期间,最好使用
测试区块链 ,
一键即可获得10个免费测试波。 尽管由于该技术的新颖性,Google仍未找到很多示例,但智能合约已得到充分
记录,并包含所有必要信息。
NodeJs库(1.4.0)在浏览器中运行良好(创建Alias除外),但是不幸的是,它与Google Functions或React Native不兼容(Wave开发人员
承诺在不久的将来对此
进行修复)。
智能合约
将为一个帐户创建一个智能合约,并检查该帐户的所有操作(汇入的资金除外):
let signature = base58'${currentWallet.keyPair.publicKey}'; match tx { case tx:TransferTransaction => { let employerAddress = addressFromPublicKey(tx.senderPk); let dateKey = toBase58String(addressFromRecipient(tx.recipient).bytes); let salary = extract(getLong(employerAddress, dateKey)); if((salary == tx.amount) && sigVerify(tx.bodyBytes, tx.proofs[0], signature)) then true else false } case _ => false }
智能合约逐行解析
let signature = base58'${currentWallet.keyPair.publicKey}';
在这里,我们保存了钱包的公钥(您的JavaScript必须包含使用Waves.Seed.create()命令创建的currentWallet变量),以便只有钱包的智能合约帐户(在我们的示例中为Smart Rewarding Project)可以转移资金。
match tx { case tx:TransferTransaction => {some validations} case _ => false }
这是任何Waves智能合约的基本结构,它告诉我们该合约禁止转移资金(TransferTransaction)以外的任何活动。 因此,创建合同后,就无法更改开发人员上的数据(DataTransaction)或更改智能合同本身(SetScript)。
let employerAddress = addressFromPublicKey(tx.senderPk);
它使用内置
库的基本方法addressFromPublicKey从其公共密钥获取请求创建者的地址。
let dateKey = toBase58String(addressFromRecipient(tx.recipient).bytes);
基本方法addressFromRecipient获取资金接收者的地址
let salary = extract(getLong(employerAddress, dateKey));
基本的getLong方法为我们提供了存储在请求创建者地址处的区块链上的数据,即开发人员的薪水金额。 合同可以访问Waves区块链上存储的数据(并且不能访问位于任何网站或第三方服务器上的数据)。
if((salary == tx.amount) && sigVerify(tx.bodyBytes, tx.proofs[0], signature)) then true else false
这是验证正确金额和签名的地方。 True表示将允许该交易,而false表示将拒绝该交易。 因此,在从该帐户进行任何货币转帐期间,都可以验证该货币将以易于理解的密钥对格式(地址为密钥,金额为值)仅发送至开发者的钱包并以区块链中已存储的金额发送。如果信任该程序,请在转移薪水之前先检查所有数据5-10秒。
在线测试区块链上的项目演示,请
点击此处在这里您可以看到项目代码。
我希望本文内容丰富,对您撰写第一个智能合约很有用。