dType:以太坊上分布式系统和功能编程的数据类型
我谈到了dType背后的愿景,一个以太坊的分布式系统。现在,我们将更详细地探讨该协议,并了解如何在其基础上构建一个全局功能编程协议。dType旨在就数据类型达成共识并促进互操作性。
以太坊编程输入
我们知道类型系统是什么:一个允许您将特定类型分配给变量、表达式、函数等的系统,并执行编译和/或运行时检查以查看是否遵守该规则。这就消除了由于在代码中不正确地连接各种接口而导致的一组错误。
solidity是一种静态类型的语言。除了本地提供字符串或地址等基本类型之外,它还允许开发人员使用struct构造复杂的类型。
现在的情况是,每个开发人员都可以根据自己的需要自由地创建自己的复杂数据类型。这太棒了!但是如果你想建立一个更棒的世界计算机,在那里你有项目整齐地相互合作,会发生什么呢?最后会有很多项目,每个项目都在自己的封装中定义自己的类型。要使任何两个项目互操作,需要对这些项目有更深入的了解,甚至可能需要对源代码进行更改。
全局注册表分布式编程
这就是分布式系统的用武之地。社区可以讨论并就要创建和使用的类型达成共识,每个人都可以从使用这些知名的和经过测试的类型中获益。更容易看到哪些合同和外部功能使用某种类型,更容易将项目互连并分析区块链数据。
我们提议的分散式系统包含一个dType注册表合同,它引用了所有被接受的类型以及实现它们的合同。
例如,要将某些标准值类型从solidity注册到系统中,使用以下格式:
{
"contractAddress":
,"typeChoice": 0,
"source": ,
"name": "uint256",
"types": []
}
{
"contractAddress":
,"typeChoice": 0,
"source": ,
"name": "string",
"types": []
}
如果我们想要注册复杂数据类型,一个例子是:
{
"contractAddress": "0x105631C6CdDBa84D12Fa916f0045B1F97eC9C268",
"typeChoice": 0,
"source": ,
{"name": "string", "label": "accountName", "relation": 0},
{"name": "uint256", "label": "amount", "relation": 0},
"contractAddress": "0x91E3737f15e9b182EdD44D45d943cF248b3a3BF9",
{"name": "address", "label": "token", "relation": 0},
{"name": "myBalance", "label": "balance", "relation": 0},
类型合约将地址存储到包含实际类型定义的已部署类型库中,以及用于结构化和破坏数据的辅助函数和高阶函数(hofs),如map、filter、reduce。
pragma experimental ABIEncoderV2;
function structureBytes(bytes memory data) pure public
returns(myBalance memory balance);
function destructureBytes(myBalance memory balance) pure public
myBalance[] memory balanceArr,
function(myBalance memory) external pure
returns (myBalance memory) callback
中国观察