Solidity合约记录——如何开始书写合约
Posted tianxia2s
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Solidity合约记录——如何开始书写合约相关的知识,希望对你有一定的参考价值。
以往的老规矩是写代码即来Hello World,事实上Solidity实现这个功能并不难。见如下代码:
1 pragma solidity ^0.4.11; 2 3 contract HelloWorld { 4 string src = "Hello World!"; 5 6 function print(string name) returns (string, string, string){ 7 return ("Name is ", name, src); 8 } 9 }
写Hello World 就遇见尴尬的一幕,Solidity原生是不支持字符串拼接也不建议字符串拼接,为了提高执行效率可以一次返回多个字符串。以下为执行结果:
Function [print] invoking... Invoke args: From 0xca35b7d915458ef540ade6068dfe2f44e8fa733c To 0xdc544654fefd1a458eb24064a6c958b14e579154 Constant false Payload 11114af1000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000087a68616e676a6965000000000000000000000000000000000000000000000000 Invoke finish Result 0x000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000084e616d652069732000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087a68616e676a6965000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c48656c6c6f20576f726c64210000000000000000000000000000000000000000 Decoded ["string: Name is ","string: zhangjie","string: Hello World!"] TxHash 0xc460c28c8d14d53c96b3199b9f0d04ba34d3b8f9f2de92dc6f8ed420324efe92 From 0xca35b7d915458ef540ade6068dfe2f44e8fa733c To 0xdc544654fefd1a458eb24064a6c958b14e579154
那么真正开始针对具体业务需求而言,开发一个真实场景可用的智能合约应当分为以下几个步骤(引用内容):
开发流程 合约接口定义 按照良好的编程习惯,在编写业务方法前,首先定义接口,并交付给调用者。 数据结构定义 用户定义的合约接口中,如果有比较复杂的输入/输出数据,就有必要提前定义一些数据结构,并提供操作这些数据结构的一些常用方法(主要是一些序列化成JSON字符串的方法)。 业务合约编写 实现合约接口定义,并实现用户的业务逻辑。在业务合约的构造函数中,需要把业务合约注册到模块合约中。 如果用户只是想编写业务合约,做学习,测试用,则可以把业务合约注册到"juzix.io.debugModule"这个特殊名称的模块合约中,则用户可以不需要编写模块合约,从而在JUICE客户端IDE中直接调用业务合约的方法。 模块合约编写 编写模块合约,这是JUICE开放服务平台的要求,以便管理用户的DAPP应用、业务合约。在模块合约的构造函数中,需要把模块合约注册到链上,并在构造函数中说明模块合约将会使用到的所有业务合约。 用户编写了模块合约、并部署到JUICE区块链后,模块的名称将会显示在JUICE开放服务平台的“我的应用”中,点击“我的应用”的某个应用,将会跳转到用户开放的DAPP应用。如何设置应用的跳转URL,参考模块合约编写 https://open.juzix.net/api_doc/part03/example/modules.md 编译部署、测试 通过JUICE客户端,或者在线IDE,都可以完成编译、部署、测试用户合约。 参考内容:https://open.juzix.net/doc
开始研究一个具体的应用场景,首先应当做到的是合约接口定义、数据结构定义。将整体的合约结构关系理清后,合约代码实现事实上应当是较为简单的。实现部分应当注意合约中可能存在的风险,但凡有可能出现问题但是较为极端的情况,如果不避免就一定会出现问题。合约代码不同于其他代码,部署后基本不可修改,仅能进行升级、冻结等操作,不同操作与具体平台相关。而后我们来分析一部分代码,同时假设一个应用场景来对其进行实现。
我们来看台湾一个智能合约书写实现:参考链接
首先将参与方所对应的角色都列举出来,而后将不同参与者的所需操作作为方法进行列举,作为角色对外接口;之后开始编码实现。
以上是关于Solidity合约记录——如何开始书写合约的主要内容,如果未能解决你的问题,请参考以下文章
第一行代码:以太坊-使用Solidity语言开发和测试智能合约
我们可以在智能合约中使用 Solidity 获取过去区块中记录的交易信息吗?