“自治代理”或在开放的加密平台Obyte中执行代码



Obyte是一个开放式加密平台,使用有向无环图(DAG,无循环有向图)作为交易注册表而不是区块链,所有参与者都可以免费平等地访问注册表。 DAG与每个人通常使用的区块链不同,由于拒绝区块和严格的交易顺序,DAG可以直接将数据发送到分布式注册表,而无需矿工的参与。 与区块链相比,DAG体系结构不需要特权类的用户,例如矿工,伪造者或区块生产者,因此用户与网络上的注册表之间没有中介,每个人都具有平等而直接的访问权限以将事务添加到注册表中。

在本文中,我想谈谈Obyte,自治代理,并将所有这些与以太坊进行比较。

什么是自治代理?


这是一个程序,其源代码存储在注册表(DAG)中,并且具有自己的地址,类似于任何其他网络参与者的地址。 该程序描述了响应将硬币和数据发送到该地址而将执行的动作。 如果您熟悉以太坊智能合约,那么自治代理与它们的含义就非常接近。

生活中的一个例子是自动售货机。 响应在键盘上键入的产品编号并输入金额,设备将向用户提供产品本身。 AA和自动售货机之间的一个重要区别是:自动售货机由其所有者控制,用户只希望设备的操作符合用户的期望。 自治代理是真正的自治:整个程序存储在DAG中,其源代码对所有网络参与者可见,无法更改,禁用或删除。

例如,您可以对AA进行编程以交换令牌。 对于编程,为这些任务开发的语言是Oscript。
Obyte也有智能合约的概念,但它们与AA或以太坊智能合约不同。 AA和Obyte智能合约之间的主要区别在于,智能合约就像现实世界中的常规合约一样,在两个参与者之间运行,并说在什么条件下可以执行合约。 简而言之,一组允许或禁止交易的条件。 同时,自治代理是一个独立的编程参与者,我们与之交互以发起其响应(新交易等)。

在触发交易稳定之后,即开始执行AA代码(也就是说,在交易上已达成共识,并且绝对不存在重复支出)。 每个全节点将在其注册表副本上执行AA代码,并仅在其数据库中记录执行结果。 无需将执行结果中继到其他节点,因为 网络中所有参与者的状态是相同的,执行的结果也是确定性的,并且对于每个人都是相同的。 注册表的最终状态仅由AA执行规则决定,不受矿工,选民或任何其他人的控制。

为什么需要它们?


AA允许在分散模式下创建类似

  • 选项
  • 期货合约
  • 算法稳定的硬币
  • 综合资产
  • 其他衍生品
  • 担保贷款
  • 保证金交易
  • 分散交易
  • 分散的神谕
  • 付款渠道
  • 经济博弈
  • 做市商
  • 自动投资组合管理

还有更多...

用户透明度


从存在的第一天起,Obyte就提供了以人类可以理解的形式签订人与人之间智能合约的机会。 用户的透明度和易感性一直是创建平台的主要原则之一。

尽管Oscript是一种编程语言,并且是为机器和程序员(而非普通人)所感知而创建的,但我们仍努力不偏离我们的原则。 因此,对于不熟悉编程的人来说,GUI钱包将尝试在进行交易之前解释AA代码,并以其理解的方式向用户显示结果:



Oscript-独立代理语言


熟悉任何C语言的开发人员都可以轻松使用AA。

首先,我想了解一下这些功能。

AA仅适用于触发交易。 它可以是付款或AA数据传输。 例如,您传递数据{foo:'bar',value:100} ,AA会将它们作为输入接收,并基于此执行操作。

机管局可以使用什么


  • 任何描述DAG当前状态的变量
  • 触发交易中收到的金额
  • 来自交易触发的数据
  • 谁发送了触发交易
  • 我们和其他AA的状态变量
  • 从DAG访问各种公共数据,例如来自oracle的data_feed,真实姓名证明等。
  • 我们和其他AA的余额
  • 资产信息

Oscript功能


Oscript-不是图灵完整的语言,但是,其库中有:

  • 算术运算
  • 逻辑运算(和,或等)
  • 比较
  • 字符串串联
  • 一些数学函数
  • 加密功能(哈希创建,签名验证)
  • 分支(如果/否则)
  • 没有循环和函数(以防止无限递归)。 您可以在此链接的手册中找到更多信息

为了控制资源的使用并防止恶意方案,AA最多只能进行100个劳动密集型操作,例如加密功能或数据库访问。 验证在部署代理代码时进行。

但是,没有复杂的公式来计算AA性能的成本。 根本没有这样的公式,代码执行是免费的,像AA一样,用户只需为将数据添加到DAG注册表中付费,就像其他网络成员一样-添加到DAG的每个字节数据都以Obyte货币为1个字节。 但是,AA必须保持其平衡(以字节为单位)不小于其存储的所有状态变量的大小。

如果在执行时AA触发另一个AA的执行,则首先将第一个AA的结果事务记录在注册表中,然后才开始执行下一个AA。

自治代理在行动


现在,我们将编写最简单的乒乓球脚本。 我们寄给AA钱,他把剩下的钱留给自己,剩下的又退回去了。 我们将在ObyteEthereum两个平台上解决相同的问题然后进行比较。 在以太坊中,相似的AA实体通常被称为智能合约(尽管以太坊白皮书曾称它们为自治代理)。

以太坊


我会尽力而为。模式下运行节点,然后等待同步。

geth --testnet --ws --wsapi "admin,db,eth,net,web3,personal" --syncmode "light" --allow-insecure-unlock 

现在,我们有两个用于事件开发的选项:

  1. 等到检测到对等方并开始同步
  2. 手动添加对等

我选择了第二个选项。 rfikki和他现成的命令清单 应运而生 。 我们已连接到该节点并添加对等端:

 geth attach ws://127.0.0.1:8546 admin.addPeer("enode://bc827e035cf3a42c249374be7ddc9c2fb819765c440116cf01aa6a8d70d03043d29ccd42b32a283f5ab08294467eb3b92fc40111e9af1770c84bc116edae89c0@104.248.199.52:30303"); admin.addPeer("enode://2d86877fbb2fcc3c27a4fa14fa8c5041ba711ce9682c38a95786c4c948f8e0420c7676316a18fc742154aa1df79cfaf6c59536bd61a9e63c6cc4b0e0b7ef7ec4@13.83.92.81:30303"); admin.addPeer("enode://053d2f57829e5785d10697fa6c5333e4d98cc564dbadd87805fd4fedeb09cbcb642306e3a73bd4191b27f821fb442fcf964317d6a520b29651e7dd09d1beb0ec@79.98.29.154:30303"); admin.addPeer("enode://690c93ac2f6e6f711a175cc6a73a3cf3b649eea83c458ce34364c69d1b557bb408693f06bdf6fc31538a744d5c231fdd904cce5665d04ce165032c0fc009a208@104.248.199.160:30303"); 

之后,同步过程将开始,为了不浪费时间,请创建一个帐户。 为此,我们将在连接中编写以下命令并设置密码:

 personal.newAccount(); 

在控制台中,我们将看到地址,将其复制并转到faucet 。 粘贴在字段中,然后单击发送。
现在检查同步:

 eth.syncing #   false eth.blockNumber #        https://ropsten.etherscan.io/ 

并检查余额:

 eth.getBalance(eth.accounts[0]) #   1000000000000000000 

准备工作已经完成,现在我们可以继续编写和发布合同了。

创建一个文件,例如pingPong.sol并将我们的合同写入其中:

 pragma solidity ^0.5.10; contract PingPong{    function deposit() payable public {        msg.sender.transfer(msg.value - 20000);    }       function getBalance() public view returns(uint256){        return address(this).balance;    } } 

在此合同中,我们创建了两个公共职能:
存款 -补货赎回并减去20,000。
getBalance-仅向我们显示合同地址的余额。

接下来,我们需要编译它,为此,我使用npm模块solc

 solcjs -o . --bin --abi pingPong.sol 

现在准备编译的文件,以便在geth客户端中快速下载。 更改abi文件以使其外观
 var pingPongContract = eth.contract([{"constant":true,"inputs":[],"name":"getBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"deposit","outputs":[],"payable":true,"stateMutability":"payable","type":"function"}]); 

垃圾桶查看

 personal.unlockAccount(eth.accounts[0]) var pingPong = pingPongContract.new( { from: eth.accounts[0], data: "", gas: 500000}); 

转到geth客户端并连接这些脚本

 loadScript('sol2/pingPong_sol_PingPong.abi') loadScript('sol2/pingPong_sol_PingPong.bin') 

其中sol2是脚本文件夹的路径。 执行完第二个脚本后,他会要求您解锁帐户。 做完了

接下来,编写“ pingPong”。 如果结果是您发现该地址不为空-合同已经发布,否则-您需要稍等一下然后重试。

之后,我们将执行存款功能,汇款,然后检查一切。

 personal.unlockAccount(eth.accounts[0]) pingPong.deposit({from: eth.accounts[0], value: 500000}); 

在输出中,我们可以看到交易ID。 复制它,稍后我们将需要它。 在此之前,我们调用getBalance函数,我们看到那里有20,000,我们减去了。

 pingPong.getBalance() 

现在让我们切换到etherscan。 在那里,您将在“内部交易”中看到48,000的退货款。 原来是这样-https: //ropsten.etherscan.io/tx/0xc3fab9f39f2ec32eadffc54608a61c3c77c4ac0f3630037b5c312d3b66ee85f8#internal

字节数


对于发布,我们将使用Oscript编辑器

清洁它提供给我们的模板。 我们将从头开始写。 最小AA是具有消息数组的对象。

 { messages: [] } 

由于我们将发送付款,因此我们需要在消息中添加一个对象,该对象具有指示此内容的属性:

 { messages: [        {            app: 'payment',            payload: {                asset: 'base',                outputs: [                    {address: "{trigger.address}", amount: "{trigger.output[[asset=base]] - 20000}"}                ]            }        }    ] } 

在这里,我们看到了付款的标准元数据。 在行中使用“ {}”来更改它们。 触发对象用于传输值;它存储有关收到的付款的信息。 您可以在文档中了解有关语法的更多信息。

我们将此代码粘贴到编辑器中,然后单击“部署”。 仅此而已!
机管局出版,下面我们看到了地址。 现在我们需要一个testnet GUI钱包 ,安装并运行它。 接下来,要获得一些测试硬币,请转到“聊天”,选择“ Bot Store”并在其中添加“ Faucet Bot”。 我们的聊天将打开,单击左侧菜单,然后选择“插入我的地址”


然后,我们发送并等待收到钱的消息:“付款:...”。 接下来,我们需要转到主要的硬币,直到“包括待确认的确认”字样消失(几分钟),这意味着已确认收到的硬币并且可以使用它们。

我们剩下的就是去“接收”,输入地址AA,输入金额“ 500000”,然后按“发送”。 现在,我们需要等到交易稳定(检查历史记录)。 这是必须触发的。 我们将检查钱是否退还给我们:



就是这样,它起作用了。 通过去AA的探险家我们可以看到他的余额增加了20,000减去支付给我们的费用。 在Obyte,自治代理自己为执行的动作支付佣金。

结论


从上面的比较可以看出,Obyte更容易发布,编写和控制发生的事情。 例如,在以太坊中,我们可以正确选择外向交易的气体远非总是如此,因此可以在很长的时间内确认它。 以太坊的优势之一是可以快速发布和确认(大约一分钟,取决于所提供的气体)。 在Obyte中,发布会立即进行,确认时间取决于网络负载,轻负载-大约10-15分钟,大负载-不到三分钟。

在以下文章中,我们将分析一些有趣且生动的示例,例如,如何使用AA实现简单的DAO并回答您的问题。

比赛项目


在创新方面,我们邀请开发人员参加竞争,以争取最有趣和令人印象深刻的自治代理应用程序。 比赛已经在进行中,将持续到10月中旬。 作为已经收到的申请的示例,有几个众筹AA,两个交易所,各种“注册表”和声誉跟踪器,彩票,游戏等。 每两周,Obyte团队的评审将公布最佳作品。

比赛的总预算为38,000美元 (以发布时的GB汇率为准)。

您可以在本文中阅读有关竞争的更多信息。

Source: https://habr.com/ru/post/zh-CN467209/


All Articles