共计 2487 个字符,预计需要花费 7 分钟才能阅读完成。
文章目录
1. 摘要 2. 动机 3. 详述 3.1 原生资产转移 URI3.1.1 URI 键 3.1.2 可用 URI 键 映射 NEO 交易属性键 3.1.3 参考原生资产地址 3.1.4 例子 3.2 智能合约调用 URI3.2.1 NEP-5 token 转移 3.2.2 URI Keys3.2.33.2.3 例子 4. 原理 5. 实现 6. 参考
摘要
本 NEP 描述了一个用于 NEO 原生资产转移的 URI 标准。此外,它提议一个 URI 子集用于完善智能合约操作,在本提案所包含的 NEP-5token 被转移时。未来,随着更便于理解的和经过良好测试的合约被加入网络时,URI 会被增加。我们定义了一个框架用于判定一个 URI 方案是否适用于下面的智能合约操作。
动机
目前,没有标准 URI 可供 NEO 客户端使用。比特币实现了一个 URI 标准,因此点击连接或扫描二维码可以轻松实现一个比特币支付。同样,NEO 上的原生资产转移可应该如此简单易行
然而,NEO 可能可以通过智能合约的调用实现更多的合约操作。这包括 token 的铸造和转移,注册域名,交换和另外一些自定义应用。理想情况下,一个 URI 存在通用智能合约的调用。然而,这存在安全隐患,可能很难判定智能合约实际做了什么,可能因此导致资金的损失
为了解决该问题,我们提议为通用智能合约调用生成的 URI 被限制在一个完善的合约操作的子集内(例如 NEP-5 token的转移)。这将是得客户端轻松理解和验证给定的 URI 将要进行的操作。如果客户端更注重安全性,可以维护一个遵顼给定 URI 规范的合约白名单
任何新的被添加进本提案的 NEO URI 对应的智能合约应当是安全、记录良好和广泛使用。我们将在本提案的最后进行更多的讨论
详述
原生资产转移 URI
原生资产的转移有以下 URI。它描述了接收者地址,资产和伴随着交易发送的额外属性。URI 方案: neo
neo:<address>[?asset=<asset>][?amount=<amount>][?<TransactionAttributeKey>=<value>]
URI 键
可用 URI 键 映射 NEO 交易属性键
参考原生资产地址名字 哈希 NEO c56f33fc6ecfcd0c225c4ab356fee59390af8560be0e930faebe74a6daff7c9bGAS 602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7
例子开始交易到指定地址 neo:AeNkbJdiMx49kBStQdDih7BzfDwyTNVRfb
开始未指定数量 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 原生资产的安全转移
智能合约调用 URI
为了调用智能合约,我们需要指定脚本哈希和智能合约被调用的操作以及提供所需的参数。这样,应用可以定制屏幕界面用预填充的信息来匹配调用的操作。例如:NEP-5 token 的转移,投票等。而用户需要做的是授权 / 签和交易。
正如之前所提到的,通用智能合约的调用并不一定适用于 URI。这是既是因为安全问题也是因为可用性。URI 的客户端应该 100% 确信他们使用的 URI 会达成预期的效果。将其限制在合约操作的子集可以解决大部分繁杂的问题。如果客户端想要更加安全,它可以在每个受支持的智能合约 URI 的子集中构建自己的白名单。
任何对受支持合约 URI 的添加都应遵守与其他 NEO 改进提案一样的过程。为了添加一个受支持的智能合约 URI,操作 / 提案应具有以下内容…1. 不指定应用 2. 经过良好的测试 3. 良好的文档并很容易被客户端使用 4.URI 使用例子
NEP-5 token 转移 NEP-5token 的转移是智能合约的调用并具有以下 URI。
neo:<address>?asset=<NEP5ScriptHash>[?amount=<amount>][?<TransactionAttributeKey>=<value>]
URI Keys
例子开始转移 10ONT 到指定地址的交易 Beginneo:AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y?asset=ceab719b8baa2310f232ee0d277c061704541cfb&amount=10
开始转移非指定数量的 ONT 到指定地址交易 neo:AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y?asset=ceab719b8baa2310f232ee0d277c061704541cfb
原理
URI 需要考虑对于用户和钱包开发者的易用性和安全隐患,尤其是在执行任意智能合约。与智能合约调用相比,我们可以使用与转移原生资产相关的 URI 来更轻松的实现安全保障。
实现
参考实现• https://github.com/O3Labs/NEP…• https://github.com/O3Labs/nep…
参考
以下讨论有许多与智能合约 URI 安全相关的论点• https://github.com/ethereum/E…
来自 https://github.com/neo-projec…