1. 智能合约(Smart Contract)

智能合约(Smart Contract),是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约部署在区块链节点,当智能合约中设定的事件被触发时,智能合约就会自动执行,此过程无需第三方参与。

2. solidity

在编写智能合约的语言当中最火的就是solidity语言。Solidity 是一门面向合约的、为实现智能合约而创建的高级编程语言。这门语言受到了 C++,Python 和 Javascript 语言的影响,设计的目的是能在以太坊虚拟机(EVM)上运行。Solidity 是静态类型语言,支持继承、库和复杂的用户定义类型等特性。

它的语法接近于Javascript,是一种面向对象的语言。但作为一种真正意义上运行在网络上的去中心合约,它又有很多的不同,下面列举一些:

  • 以太坊底层是基于帐户,而非UTXO的,所以有一个特殊的Address的类型。用于定位用户,定位合约,定位合约的代码(合约本身也是一个帐户)。
  • 由于语言内嵌框架是支持支付的,所以提供了一些关键字,如payable,可以在语言层面直接支持支付,而且超级简单。
  • 存储是使用网络上的区块链,数据的每一个状态都可以永久存储,所以需要确定变量使用内存,还是区块链。
  • 运行环境是在去中心化的网络上,会比较强调合约或函数执行的调用的方式。因为原来一个简单的函数调用变为了一个网络上的节点中的代码执行,分布式的感觉。
  • 最后一个非常大的不同则是它的异常机制,一旦出现异常,所有的执行都将会被回撤,这主要是为了保证合约执行的原子性,以避免中间状态出现的数据不一致。

代码示例:

pragma solidity >=0.4.22 <0.6.0;
contract returnmanyresults{
    //返回多个参数。
    function getmanagResult()public pure returns(uint a, uint b, uint c){
        return(1,2,3);
    }
}

3. 合约的编写、编译、测试

在区块链(二) 基于Ubuntu系统的以太坊客户端环境搭建中已经提到了本地Remix IDE的安装。在这里不在陈述。介绍一下Remix IDE的使用。

Remix IDE启动:

JAVA 调用智能合约 实例 智能合约的编程语言_区块链

Remix IDE启动之后在浏览器打开:http://localhost:8080/进入如下界面:

        

JAVA 调用智能合约 实例 智能合约的编程语言_区块链_02

 

和大多数 IDE 一样,最左边是文件浏览,中间是代码编辑区域,右边是功能区域,下边是日志区域。在右侧的功能区域,常用的是 CompileRun 及 Debuger 几个标签页(Tab)。在 Compile 页,会动态的显示当前编辑区域合约的编译信息,如显示错误和警告。编译的直接码信息及 ABI 接口可以通过点击 Details 查看到。

JAVA 调用智能合约 实例 智能合约的编程语言_JAVA 调用智能合约 实例_03

切换到Run界面进行合约部署和测试:

         

JAVA 调用智能合约 实例 智能合约的编程语言_以太坊_04

至此,智能合约的编写、编译,部署、测试已经完成。

下一篇文章我们介绍如何在以太坊客户端部署我们编译好的合约。进行合约部署之前我们要拿到合约的abi和字节码。

1.我们在智能合约的编译界面点击abi,会自动复制当前合约的abi。

2.合约的字节码则通过点击 Details 查看bytecode中的object。