主页 > imtoken官方安卓下载 > 【技术教程】如何在以太坊智能合约中使用Bluzelle分布式数据库
【技术教程】如何在以太坊智能合约中使用Bluzelle分布式数据库
距离 Bluzelle 的第一个测试网络 Lovelace 发布已经两个月了。 在此期间,很多朋友和开发爱好者都对如何使用Bluzelle的分布式数据库感到好奇。 众所周知,我们的数据库适用于不同的公链(如以太坊、NEO),甚至可以用于传统的Javascript应用。 Bluzelle支持不同的开发语言和编程环境,我们会陆续推出一系列不同的教程。
根据粉丝投票,大家最想看的第一个教程就是以太坊智能合约如何使用Bluzelle数据库,下面开始往下看
温馨提示:
关于 Oraclize
以太坊智能合约要使用Bluzelle数据库以太坊智能合约的应用,关键是要编写一个可以使用Bluzelle Library(函数库)发出CRUD(创建、读取、更新、删除)请求的智能合约。 这些请求会通过 Oraclize(连接以太坊和 Bluzelle 的中介服务)发送到 Bluzelle 集群,然后响应会通过 Oraclize 发送回智能合约。 所以:
使用步骤
在您的应用程序中,从以下链接导入 blzelle.sol 文件:
*链接提供的智能合约是最基本的CRUD请求合约,您可以根据自己应用的安全和功能需求修改智能合约
BluzelleClient 智能合约将包含所有需要与 Bluzelle 数据库交互的 CRUD 指令。 只需导入这个合约,你可以简单地使用以下四个命令:
作为演示,我们使用以下智能合约应用程序
注意:
由于智能合约在以太坊上每完成一条指令都需要产生一笔交易,因此需要向Oraclize服务器提供一定数量的ETH来处理这些请求。
比如新建一个键值对以太坊智能合约的应用,只需要在应用中执行add(key, value),发送0.002ETH(举例)即可生成一笔交易。 只要您发送的 ETH 达到 Oraclize 要求的数量,Oraclize 就会扣除所需费用,将请求传递给 Bluzelle 集群,然后将剩余的 ETH 返还给您申请的合约地址。 用户可以使用命令 retrieveETH 轻松取回剩余的 ETH。
当CRUD命令完成,数据已经发送到集群或从集群请求数据时,只需要等待Oraclize执行_callback命令即可。 您可以根据需要和数据处理方式修改应用程序中的 _callback 指令。
视频演示
该视频 CTO 将向您展示:
第 1 部分:部署智能合约
将智能合约(演示)复制到 Remix(用于构建和打包智能合约的浏览器应用程序)
使用 Ropsten ETH 将智能合约部署到 Ropsten 测试网
获取下一步的ABI和合约地址
第二部分:使用智能合约
使用第一步获取的合约地址设置MyEtherWallet
从 MyEtherWallet(链上)执行 CREATE 命令
通过 CRUD 应用程序的 READ 函数验证 CREATE 指令是否已完成(链下)
从 CRUD 应用程序执行更新命令以更改键值对(链下)
从 MyEtherWallet(链上)读取更改后的新键值对
扫码进入视频(或点击文末“原文链接”)
开发者可以改变智能合约中业务逻辑的状态。 详情请参考以下文件:
有兴趣的开发者也可以随时试用我们已经部署在以太坊上的演示应用:
[{"constant":true,"inputs":[],"name":"last_value_read","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_uuid","type":"string"}],"name":"changeUUID","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"myid","type":"bytes32"},{"name":"result","type":"string"}],"name":"__callback","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"changeOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"myid","type":"bytes32"},{"name":"result","type":"string"},{"name":"proof","type":"bytes"}],"name":"__callback","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_key","type":"string"}],"name":"eliminate","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"current_uuid","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"last_result_received","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"apiCreate","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"last_key_used","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_key","type":"string"}],"name":"getValue","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"keyExists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_url","type":"string"}],"name":"changeURL","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"retrieveETH","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"apiRemove","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_key","type":"string"},{"name":"_value","type":"string"}],"name":"set","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_key","type":"string"},{"name":"_value","type":"string"}],"name":"add","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"apiRead","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"apiUpdate","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_uuid","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"prevOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_action","type":"string"},{"indexed":false,"name":"_key","type":"string"},{"indexed":false,"name":"_response","type":"bool"},{"indexed":false,"name":"_timestamp","type":"uint256"}],"name":"swarm_response","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_key","type":"string"},{"indexed":false,"name":"_value","type":"string"},{"indexed":false,"name":"_timestamp","type":"uint256"}],"name":"swarm_read","type":"event"}]
更多资源
如果您在使用过程中有任何问题,欢迎扫描文末二维码添加客服小姐姐,或加入我们的开发者社区与技术团队直接交流(目前只有英文频道)
更多英文技术文档可以查看(中文文档也将陆续发布)