智能合约

编程语言

使用golang作为编程语言(对部分关键字限制,以保证处理的有序性),而不是重新创造编程语言。
golang是一个简单、易用的编程语言,它有完善的帮助文档和开发工具。
它是强类型校验,编译阶段就能够校验发现很多bug。
它是模块化的,本系统能够简单屏蔽外部功能,使智能合约处在简单可预期的环境中。
已经有大量的golang开发人员,他们如果要开发智能合约,非常容易上手。

智能合约的分类

公私之分

公有合约:它用合约的代码,计算哈希作为合约的名字。它的账户是公有账户。
私有合约:它用合约的代码哈希和用户账户进行二次哈希作为合约的名字,所以不同的人使用相同的代码创建的私有合约都不一样,它的账户是创建者的账户,允许合约操作该账户。
只要是相同的代码,发布的公有合约都有相同的名字。
相同代码的合约,在不同的链上,具有相同的名字,支持跨链访问相同合约的Log信息。

功能之分

可执行合约:该合约允许用户调用,合约有执行入口,默认任何人都可以调用合约。
可被引用合约:该合约能够被其他合约import,从而组成功能更加强大的合约。
一个合约允许同时拥有这两种功能。

智能合约说明

系统要求合约发布的都是源码,任何人都可以看到源码的内容。相比编译后的二进制程序更方便查看、更容易理解。
智能合约发布后,所有的代码逻辑就固定了,通过看懂代码,从而更加信任智能合约。
所有合约都只能import链上的其他合约,不允许import链外的模块,不支持import golang的系统模块。部分会导致程序无序的关键字将被禁止,如go、select、rang、recover、cap。
每条链都包含相同的系统合约,通过它,能够读写数据(存储),转账等。公有合约只能import公有的合约,从而保证任何人都可以将公有合约发布到其他链上。私有合约允许import任何合约,不做限制。
发布的合约,将在每个节点上被编译成程序,支持用户调用。
合约的执行需要消耗Energy,它就是代币,它的消耗根据合约执行的代码行数决定。合约在节点中编译时,会被动态增加代码行覆盖统计,它将作为合约执行手续费的一个依据。

跨链读取信息

智能合约可以通过Log对象,实现跨链读取信息。接口由系统合约提供,支持跨多条链读取信息。 读取的信息是由另一条链上的相同合约写入的。
日志的时间差必须要大于n*5分钟。时间差为当前区块时间-日志写入时间;n为当前所在的链与日志所在链的逻辑距离(二叉树上从一个点到另一个点的距离)。如果时间不满足,将返回空值。

性能和可扩展性

可执行合约最终将被编译成可执行文件(.exe),可执行文件具有较高的执行效率。 一条链上的智能合约的TPS性能极限取决于链的TPS性能,单链上合约性能理论上趋近于所在链的性能。
智能合约通过在不同链上发布,使用多链的并行处理机制,实现智能合约整体性能的扩展。
智能合约又可以通过Log的跨链读取功能,实现数据的跨链转移。
所以智能合约的极限性能就是整个系统的性能。