上一期我们介绍了本体Python智能合约的合约执行API。本期我们将讨论如何通过原生API调用本体的原生契约。原始契约调用最典型的功能就是契约传递,这也是整个智能契约的核心部分。本机API只有一个API。用法如下:
同时,使用Invoke函数需要借助内置的state函数来封装参数。用法如下:接下来详细说说这两个API的用法。在此之前,朋友们可以在本体智能合约开发工具SmartX中创建新合约,关注我们。和前面的API讲解一样,在文章的最后,我们会给出本次讲解的所有源代码和视频讲解。02Native API使用方法同样,在使用这两个函数之前,也需要先介绍一下。接下来两条语句分别介绍这两个函数。
来自?ontology . interop . ontology . native?进口?Invokefrom?ontology.builtins?进口?State
2.1本体的原生契约列表目前有六个原生契约可供本体使用。以下是使用Native API可以调用的原生契约列表:
在契约中,只需将契约地址转换为bytearray,并传递给Invoke即可。比如需要调用ONT令牌合约时,可以先将ONT令牌合约对应的地址转换成对应的bytearray形式,然后进行对应的Invoke函数调用。调用Invoke函数时,传入的参数是版本号、契约地址、被调用的契约方法和状态函数封装的传输相关参数。这里需要注意的是,ONG的合同转让时,填写的金额是实际金额的10 ^ 9倍。也就是说,如果你需要转10个ONG,那么这个数字就需要填成10 ^ 10。使用ONTO或氰基等钱包转账时,填写的数量为转账数量。
合同地址ONT?=?bytearray(b ' x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x01 ')param?=?state(from_acct,to_acct,ont_amount)?#?参数是转出地址和转入地址。转移金额res?=?调用(1,合同地址ONT?'传送'[param]]2.2转会合同代码
这里我们给出一个完整的例子,演示如何用Python语言实现ONT和ONG的转会功能。接下来的代码以传入传出帐户和传入地址的参数类型为字符串为例来实现这个契约。此外,还可以用地址作为账户参数进行转账,节省话费。合同代码流程如下:
定义合同_地址_ ONG;变量contract_address_ONT,contract _ address _ ong
将传出地址和传入地址从base58格式转换为bytearray格式;
核对签字确认转出地址与合同调用地址为同一地址;
状态函数封装传输相关参数;
Invoke函数调用ONT令牌和ONG令牌原生契约转移;
通过返回RES判断转账是否成功,返回值b'x01 '为成功,如果成功,则推送“转账成功”事件。
来自?ontology . interop . system . runtime?进口?通知,从哪里检查证人?ontology . interop . ontology . runtime?进口?Base58ToAddressfrom?ontology . interop . ontology . native?进口?Invokefrom?ontology.builtins?进口?状态#?合同?地址?合同地址ONT?=?bytearray(b ' x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x01 ')contract _ address _ ONG?=?bytearray(b ' x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x02 ')def?主(操作,args):如果?操作?==?转移'from_acct?=?args[0]?to_acct?=?args[1]?ont_amount?=?args[2]?ong_amount?=?args[3]?回归?转账(转出账户、转入账户、转入金额、转入金额)?回归?Falsedef?转账(from_acct,to_acct,ont_amount,ong_amount):#?将base58地址翻译成?Bytearray格式地址?from _ acct=base 58 to address(from 尚力财经小编2022 _ acct)?to _ acct=base 58 to address(to _ acct)?#?查一下,打电话的人和转出的地址必须是同一个地址?如果?CheckWitness(from_acct):#?ONT转移?如果?ont_amount?0:param?=?state(from_acct,to_acct,ont_amount)?#?状态函数是用来封装传输相关参数的??res?=?调用(1,合同地址ONT?'传送'[param])?#?调用呼叫ONT?Token原生合约转让??如果?res?然后呢。res?==?b'x01 '?通知('转移?成功’)??否则:?通知('转移?失败’)?#?ONG转账,流程同上?如果?ong_amount?0:param?=?state(from_acct,to_acct,ong_amount)??res?=?调用(1,合尚力财经小编2022同地址ONG?'传送'[param])??如果?res?然后呢。res?==?b'x01 '?通知('转移?成功’)??否则:?通知('转移?失败’)?否则:通知(' CheckWitness?失败))03SmartX练习
接下来,朋友们可以在SmartX上操作,编译运行上面提供的合约样本代码。具体步骤如下:1 .编制合同。首先,在SmartX中创建一个新的契约项目,并将代码放入这个项目中进行编译。
2。部署合同。如果部署时需要申请测试币,申请地址为https://developer.ont.io/applyOng.部署结果如下:
3 .执行转移。您需要在执行转账功能进行转账前设置相关参数。在本例中,您需要填写发送地址、接收地址、ONT数量和ONG数量:
4。转移成功。当传输参数设置正确时,执行传输功能将使传输成功。收到的令牌会显示在上面填写的接收地址:
04总结在这个技术角度上,我们引入了本体区块链的Native API,开发者可以使用Native API进行本体原生契约调用。原始契约调用最典型的功能就是契约传递,这也是整个智能契约的核心部分。在接下来的技术角度中,我们将介绍升级API,并讨论如何在本体智能契约中升级契约。本期所有语法部分我们都提供了中文视频,朋友们可以观看学习。
标签: 2022