dType:以太坊上分布式系统和功能编程的数据类型

来自:qukuaiwang.com.cn 归档时间:2019-04-24
我谈到了dType背后的愿景,一个以太坊的分布式系统。现在,我们将更详细地探讨该协议,并了解如何在其基础上构建一个全局功能编程协议。dType旨在就数据类型达成共识并促进互操作性。

以太坊编程输入

我们知道类型系统是什么:一个允许您将特定类型分配给变量、表达式、函数等的系统,并执行编译和/或运行时检查以查看是否遵守该规则。这就消除了由于在代码中不正确地连接各种接口而导致的一组错误。

solidity是一种静态类型的语言。除了本地提供字符串或地址等基本类型之外,它还允许开发人员使用struct构造复杂的类型。

现在的情况是,每个开发人员都可以根据自己的需要自由地创建自己的复杂数据类型。这太棒了!但是如果你想建立一个更棒的世界计算机,在那里你有项目整齐地相互合作,会发生什么呢?最后会有很多项目,每个项目都在自己的封装中定义自己的类型。要使任何两个项目互操作,需要对这些项目有更深入的了解,甚至可能需要对源代码进行更改。

全局注册表分布式编程

这就是分布式系统的用武之地。社区可以讨论并就要创建和使用的类型达成共识,每个人都可以从使用这些知名的和经过测试的类型中获益。更容易看到哪些合同和外部功能使用某种类型,更容易将项目互连并分析区块链数据。

我们提议的分散式系统包含一个dType注册表合同,它引用了所有被接受的类型以及实现它们的合同。

例如,要将某些标准值类型从solidity注册到系统中,使用以下格式:


{
  "contractAddress": <address of the uint256 Type Contract>,
  "typeChoice": 0,
  "source": <bytes32 SWARM hash for source files>,
  "name": "uint256",
  "types": []
}

{
  "contractAddress": <address of the string Type Contract>,
  "typeChoice": 0,
  "source": <bytes32 SWARM hash for source files>,
  "name": "string",
  "types": []
}

如果我们想要注册复杂数据类型,一个例子是:

{
  "contractAddress": "0x105631C6CdDBa84D12Fa916f0045B1F97eC9C268",
  "typeChoice": 0,
  "source": <a SWARM hash for source files>,
  "name": "myBalance",
  "types": [
    {"name": "string", "label": "accountName", "relation": 0},
    {"name": "uint256", "label": "amount", "relation": 0},
  ]
},
{
  "contractAddress": "0x91E3737f15e9b182EdD44D45d943cF248b3a3BF9",
  "source": <bytes32 SWARM hash for source files>,
  "name": "myToken",
  "types": [
    {"name": "address", "label": "token", "relation": 0},
    {"name": "myBalance", "label": "balance", "relation": 0},
  ]
}

类型合约将地址存储到包含实际类型定义的已部署类型库中,以及用于结构化和破坏数据的辅助函数和高阶函数(hofs),如map、filter、reduce。

pragma solidity ^0.5.0;
pragma experimental ABIEncoderV2;

library myBalanceLib {

    struct myBalance {
        string accountName;
        uint256 amount;
    }

    function structureBytes(bytes memory data) pure public
        returns(myBalance memory balance);

    function destructureBytes(myBalance memory balance) pure public 
        returns(bytes memory data);
    function map(
        myBalance[] memory balanceArr,
        function(myBalance memory) external pure 
            returns (myBalance memory) callback
    )
        view
        public
        returns (myBalance[] memory result);
}

类型合同还存储其他可选合同的地址。例如,我们可以有一个Type Storage Contract,它存储该类型的数据条目。这些数据条目可以跨不同项目聚合。

现在,开发人员可以在自己的合同中使用类型库。或者,他们可以更进一步,使用这个系统来保存他们的数据。虽然第一个选项的动机很明确:以太坊中的数据标准化和一致性,但是与当前的方式相比,使用全局存储系统的第二个选项是不同的模式。但是,全局存储系统允许我们做一些有趣的事情,如下所示。

纯功能合同/库

为了深入探讨这个协议的好处,我需要介绍另一个重要的组件。

除了类型库和存储合约之外,开发人员还可以创建具有纯函数的合约或库,这些函数知道如何与所选类型交互。我们正在将业务逻辑与状态分离。这是以太坊通用功能编程系统的第一步。

如果在dtype注册表中注册这些纯函数,并告诉注册表函数的输入和输出类型,就可以开始做一些了不起的事情。您可以在系统中实现自动化。

我们可以使用一种或多种注册类型:

pragma solidity ^0.5.0;
pragma experimental ABIEncoderV2;
contract myBalanceAndTokenFunctions {
    using myTokenLib for myTokenLib.myToken;

    function doubleBalance(myTokenLib.myToken memory myTokenData)
        public
        pure
        returns(myTokenLib.myToken memory myNewTokenData);
}

在dtype注册表中注册doubleBalance函数类型可以这样做:

逻辑链接状态

假设您希望在类型具有的某个数据条目上运行一些纯函数,然后将结果存储在函数的输出类型存储协定中。

总结

1. 使用与要使用的纯函数对应的typeHash调用run(),以及与函数输入对应的dataHashes;每个dataHash引用一个存储条目
2. dType知道如何获取每个输入数据,因为它知道输入类型并可以检索存储协定地址
3. dType还具有pure函数所在的契约/库地址
4. dType可以在与每个最终输出类型相对应的存储协定中插入计算结果。

函数编程

什么是函数式编程,在各种在线资源中详细讨论了优点和缺点。它已经成为一种广泛使用的编程范例,允许开发人员创建可扩展的项目。

尽管solidity本身不是一种函数式编程语言,但是通过改变编码模式,我们仍然可以从一些特性中获益。

我们现在将构建块看作是一个智能合约,其中包含一个封装对象,其中包含只能从内部理解的状态更改函数。这更类似于面向对象编程,并带来互操作性和可伸缩性问题。不一定是针对单个项目,而是针对全球以太坊系统。

以太坊的函数编程

使用函数式编程范例的一些好处也可以在以太坊中得到利用。

幂等,纯函数更容易测试
我们将业务逻辑与存储分开。纯函数库的审计和测试更容易,因为它们没有副作用,并且它们的输出是确定性的。您甚至可以在Mainnet上运行测试套件!这通常不会在当前项目中发生。您将要编写的大多数代码都具有这种性质。降低测试难度意味着更多编写安全代码的机会。

可重复使用的存储模式
用于dType本身的存储模式和所有类型存储协定可以是相同的。这降低了构建,测试和审计代码的成本。

高风险、小表面
包含bug风险最高的代码将是将纯函数链接结果转换为状态更改的核心。但是,这个核心是我们都可以参与,测试和审计的一般模式。因此,它有可能成为最安全的拼图。

当您对每种类型的数据进行了聚合和透明的分类后,任何人都可以使用这些数据插件并做一些了不起的事情-从经典的自动化工具到基于人工智能的工具。

我们离现实世界计算机的前景更近了一步。

作者:Loredana Cirstea

有关于dType:以太坊上分布式系统和功能编程的数据类型

区块链开发最适合用哪种语言?

如今区块链技术的火热程度可谓是到了疯狂的地步,各大行业巨头也在加紧布局区块链,势必要上演一场“群雄逐鹿”的商业大战。那这场好戏什么时候上演?有人说就在最近这两三年,还有人甚至说就在2018年区块链平台将会出现井喷。当然我们现在还无法做出准确的判断,但是我们可以先做好充足的准备。那么区块链技术到底要怎

区块链交易系统开发适合用哪种语言?

如今区块链交易系统开发已成为炙手可热的项目,众多行业都在虎视眈眈看着这块蛋糕,势必会上演一场“逐鹿中原”的商业大战。区块链技术也被称为第四次革命性技术,但这场革命什么时候会上升到另一个层面我们不得而知,目前我们能够看到就是区块链交易系统开发已经在各行各业引起了不小的波涛,因此

区块链开发最适合用哪种语言?

 如今区块链技术的火热程度可谓是到了疯狂的地步,各大行业巨头也在加紧布局区块链,势必要上演一场“群雄逐鹿”的商业大战。那这场好戏什么时候上演?有人说就在最近这两三年,还有人甚至说就在2018年区块链平台将会出现井喷。当然我们现在还无法做出准确的判断,但是我们可以先做

SCRY CITY国际Alpha版本VIP邀请发布会在上海圆满落幕

SCRY City是基于SCRY.INFO无域独立底层数据协议层所开发的世界第一款去中心化SNS 区块链真实数据合约撮合产品。SCRY CITY国际Alpha版本发布VIP邀请会6月9号在上海召开,揭示了SCRY项目组在区块链行业一年时间完成的探索和取得的成果。在此次VIP定向邀约发布会上,近300

【1期四团Day2-田宇】 浅析区块链的技术实现

本帖最后由 rembo254 于 2017-8-29 23:09 编辑 因为是计算机专业出身,对区块链进行了简单的了解之后,就非常关注其具体的实现形式。经过大量的资料查阅,总的来说,区块链作为一种架构设计的实现,与基础语言或平台等差别较大。区块链是加密货币背后的技术,本身并不是新技术,类似Ajax