NEO改进协议提案9(NEP-9)

文章目录

  • 摘要
  • 动机
  • 详述
    • 原生资产转移URI
      • URI键
      • 可用URI 键 映射 NEO 交易属性键
      • 参考原生资产地址
      • 例子
    • 智能合约调用URI
      • NEP-5 token 转移
        • URI Keys
        • 例子
  • 原理
  • 实现
  • 参考

摘要

本NEP描述了一个用于NEO原生资产转移的URI标准。此外,它提议一个URI子集用于完善智能合约操做,在本提案所包含的NEP-5token被转移时。将来,随着更便于理解的和通过良好测试的合约被加入网络时,URI会被增长。咱们定义了一个框架用于断定一个URI方案是否适用于下面的智能合约操做。git

动机

目前,没有标准URI可供NEO客户端使用。比特币实现了一个URI标准,所以点击链接或扫描二维码能够轻松实现一个比特币支付。一样,NEO上的原生资产转移可应该如此简单易行
然而,NEO可能能够经过智能合约的调用实现更多的合约操做。这包括token的铸造和转移,注册域名,交换和另一些自定义应用。理想状况下,一个URI存在通用智能合约的调用。然而,这存在安全隐患,可能很难断定智能合约实际作了什么,可能所以致使资金的损失
为了解决该问题,咱们提议为通用智能合约调用生成的URI被限制在一个完善的合约操做的子集内(例如NEP-5 token的转移)。这将是得客户端轻松理解和验证给定的URI将要进行的操做。若是客户端更注重安全性,能够维护一个遵顼给定URI规范的合约白名单
任何新的被添加进本提案的NEO URI对应的智能合约应当是安全、记录良好和普遍使用。咱们将在本提案的最后进行更多的讨论github

详述

原生资产转移URI

原生资产的转移有如下URI。它描述了接收者地址,资产和伴随着交易发送的额外属性。
URI 方案: neo安全

neo:<address>[?asset=<asset>][?amount=<amount>][?<TransactionAttributeKey>=<value>]
1复制代码

URI键

描述 是否必需
address 有效NEO地址
asset neo、gas和资产ID -
amount 资产被发送的数量 e.g 1.0 -

可用URI 键 映射 NEO 交易属性键

URIkey NEO 交易属性 描述
contractHash 0x00 合约的哈希
ecdh02, ecdh03 0x02,0x03 公钥 用于 ECDH 密钥交换
script 0x20 交易的额外验证
vote 0x30 用于投票
certUrl 0x80 证书的Url地址
descriptionUrl 0x81 描述的Url地址
description 0x90 简易描述
hash1,hash2,…,hash15 0xa1,0xa2,…,0xaf 用于存储自定义哈希值
remark,remark2,…,remark15 0xf0,0xf1,…,0xff 备注

参考原生资产地址

名字 哈希
NEO c56f33fc6ecfcd0c225c4ab356fee59390af8560be0e930faebe74a6daff7c9b
GAS 602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7

例子

开始交易到指定地址
neo:AeNkbJdiMx49kBStQdDih7BzfDwyTNVRfbbash

开始未指定数量NEO的交易
neo:AeNkbJdiMx49kBStQdDih7BzfDwyTNVRfb?asset=neo网络

开始1NEO到指定地址的交易
neo:AeNkbJdiMx49kBStQdDih7BzfDwyTNVRfb?asset=neo&amount=1.0框架

开始1NEO到指定地址且交易描述为“hello”的交易
neo:AeNkbJdiMx49kBStQdDih7BzfDwyTNVRfb?asset=neo&amount=1.0&description=Hello测试

开始0.1GAS到指定地址的交易.将公钥放在ecdh02属性字段中以容许发件人使用ECDH加密.交易属性描述为“hello”
neo:AQc5mtFayAdoCK13BW1cGAzAHyo9SoUWe7?asset= gas&amount=0.1&ecdh02=02ed53ad58c838435d4dd7a4b25c1eba01384c814ca53a539405434807afbb04b4&description=Hello
这应该足够促使NEO原生资产的安全转移ui

智能合约调用URI

为了调用智能合约,咱们须要指定脚本哈希和智能合约被调用的操做以及提供所需的参数。这样,应用能够定制屏幕界面用预填充的信息来匹配调用的操做。例如:NEP-5 token的转移,投票等。而用户须要作的是受权/签和交易。
正如以前所提到的,通用智能合约的调用并不必定适用于URI。这是既是由于安全问题也是由于可用性。URI的客户端应该100%确信他们使用的URI会达成预期的效果。将其限制在合约操做的子集能够解决大部分繁杂的问题。若是客户端想要更加安全,它能够在每一个受支持的智能合约URI的子集中构建本身的白名单。
任何对受支持合约URI的添加都应遵照与其余NEO改进提案同样的过程。为了添加一个受支持的智能合约URI,操做/提案应具备如下内容…
1.不指定应用
2.通过良好的测试
3.良好的文档并很容易被客户端使用
4.URI使用例子加密

NEP-5 token 转移

NEP-5token的转移是智能合约的调用并具备如下URI。spa

neo:<address>?asset=<NEP5ScriptHash>[?amount=<amount>][?<TransactionAttributeKey>=<value>] 
1复制代码

URI Keys

Key Description Required
address 可供转移的有效NEO地址.
asset 有效的big endian格式的合约哈希.
amount 发送的token数量 . e.g 1.0 -

例子

开始转移10ONT到指定地址的交易Begin
neo:AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y?asset=ceab719b8baa2310f232ee0d277c061704541cfb&amount=10

开始转移非指定数量的ONT到指定地址交易
neo:AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y?asset=ceab719b8baa2310f232ee0d277c061704541cfb

原理

URI须要考虑对于用户和钱包开发者的易用性和安全隐患,尤为是在执行任意智能合约。与智能合约调用相比,咱们可使用与转移原生资产相关的URI来更轻松的实现安全保障。

实现

参考实现
github.com/O3Labs/NEP9…
github.com/O3Labs/nep9…

参考

如下讨论有许多与智能合约URI安全相关的论点
github.com/ethereum/EI…

来自 github.com/neo-project…

相关文章
相关标签/搜索