火星链 火星链
Ctrl+D收藏火星链

ICP:如何在DFINITY上铸造自己的Token?关于Token标准的讨论

作者:

时间:1900/1/1 0:00:00

6月10号,ICP League 联合社区开发者举办了第三期的开发者电话会,邀请了 DFinance 项目的开发者共同探讨了如何在 DFINITY 上发行代币,以及类似 ERC-20 代币标准的设计思路。点击“阅读原文”可以查看视频回放。

本期亮点:

ICP 本身就是 DFINITY 的第一个代币,是以智能合约的形式部署在链上的,因此可以作为实现标准的参考;

在 DFINITY 上实现类 ERC-20 标准时,与以太坊不同,DFINITY 的区块链上不会保留交易的 massage,因此需要在代币标准下记录交易记录;

因为有限的容器空间中需要保存交易记录,因此代币合约存在扩容问题;

DFINITY 使用了反向 gas 模型,用户使用无需消耗 gas,因此为了避免大量垃圾交易攻击,需要在代币标准中写入转账扣费或手续费;

在以太坊网络中,ETH 代币是区块链底层的原生代币,其挖矿、转账、与合约交互、支付 gas 等交易事件也被打包放在区块中,与区块链耦合;而在 DFINITY 上,ICP 代币实际上搭建在网络上被称为“Ledger”的智能合约,ICP 代币的查询、转账、交易管理与质押等功能是现在智能合约中(archive_node.rs)。

FIBA提问:15个比特币你如何选球员?郭艾伦周琦上榜:金色财经报道,国际篮球联合会(FIBA)亚洲杯官方更新社媒,抛出了“用15个比特币组建阵容”的话题。“你会用哪些亚洲球星来组建你的最佳阵容?”FIBA亚洲杯官方社媒写道。其中,郭艾伦出现在了得分后卫的位置上,需要用最多的5个比特币来选择。出现在中锋位置上的周琦,需要用2个比特币选择,而在中锋位置上,比特币最高的是哈达迪。[2022/6/28 1:35:49]

由于 DFINITY 的智能合约更类似于互联网微服务下的容器,而智能合约的状态是保存在 Ledger 容器内部。实际上,ICP 的所以交易记录是保存在智能合约内部的,需要使用该合约的函数进行查询。

实际上,只有 DFINITY 的 gas 代币 cycles 是链上唯一的底层原生代币,而只有通过燃烧 ICP 才能获取 cycles。

所有操作都记录为 Ledger 容器内的交易,同时 DFINITY 在 Ledger 容器中记录账本时使用了区块链式的数据结构。注意,这里的区块链只是存账本数据的格式,并不是我们理解的有共识的区块链。以下是实现的状态。

声音 | 北京商报:如何把区块链等与金融业务进行融合是关键:8月28日,北京商报发布了题为《持牌机构怎么变:破体制禁锢 走独立之路 》的文章,对央行《金融科技(FinTech)发展规划(2019-2021年)》进行了解读。文章称,在分析人士看来,场景化是金融科技发展的一个重要趋势,因为只有嫁接到具体场景,才能让金融科技更好地服务于实体经济,降低风险发生的可能,而如何把AI、大数据、云计算、区块链等技术与金融业务进行合理而深度的融合是关键。[2019/8/28]

因此,ICP 可以看成 DFINITY 上第一个代币规范,他的代码已经开源,在实现类似 ERC-20 标准时最好沿用 ICP 代币的设计,开源链接:https://github.com/dfinity/ic/tree/master/rs/rosetta-api/ledger_canister。

访问 https://github.com/dfinance-tech/ic-token/blob/main/simple-erc20/src/token.mo,可以查看 DFinance 沿用 ERC-20 的 DFINITY 代币标准的源码,使用了官方开发的语言 Motoko 编写。

owner_ 表示 token 创建者,一般是容器的部署者;name_ 表示名称;decimals_ 表示代币的精确位数;symbol_ 是代币的标志;totalSupply_ 是代币的总供应量。以上是一些基础。

金色财经现场报道 海纳云CTO邹均:区块链技术难点在于如何让所有节点统一步调:金色财经现场报道,在2018区块链技术及应用峰会上,海纳云CTO邹均认为,区块链技术当前的限制难点在分布式系统中让所有节点统一步调,区块链目前存在性能限制、扩展性限制、易用性限制、兼容性跨链互联限制、存储限制、治理限制、软件升级限制等问题。[2018/3/31]

但其实表示代币位数的 decimals_ 可以考虑删除,在以太坊合约中需要这个参数是因为以太坊使用的 solidy 无法支持浮点数的计算,但是 DFINITY 的语言是可以支持浮点数运算的。

balances 是一个数据库下的类型,表示一个账户对应的余额是多少。这里使用了 DFINITY 的持久化数据库 HashMap,在账户与余额间建立了联系。allowance 记录的是 Approve,这在以太坊中经常使用,允许一个账户或智能合约使用你的余额。

这个实现沿用了 ERC-20 的 transfer、transferFrom、balanceOf、allowance、approve 这些操作。关于代币的铸造与销毁功能,在以太坊上很多项目会选择直接把代币转入 0x0 地址进行销毁,因为不可能有人能逆向算出 0x0 地址的私钥,所以再也无法转出。但在 DFinance 的标准下并没有这么操作,因为 DFINITY 目前还没有公认的销毁地址,因此实现了一个 burn 方法,在数据库中直接减去余额。

美国证券交易所:加密货币交易所没有透露是否对一些用户提供了优先服务 以及平台如何挑选加密货币:据华尔街日报,美国证券交易所今天发布了有关加密货币交易所存在不规范问题的公告。SEC在公告中表明,加密货币交易所存在非法运营的风险,这是因为他们没有透露如何优先考虑投资者的订单或如何选择在其平台交易何种加密货币。前SEC官员,现任由投资者支持的健康市场协会的执行董事Tyler Gellasch透露:“SEC不仅要管理产品,还要管理他们交易和交易的地点。”SEC没有在其声明中提及具体的加密货币交易所,但提醒投资者,监管机构对交易所的实际运作方式知之甚少,不知道它们是否为其中一些交易者提供了优先于其他交易者的服务。SEC表示,虽然其中一些平台声称采用严格的标准来挑选高质量的加密货币资产进行交易,但SEC并没有审查过这些标准。[2018/3/8]

从 DFINITY 上线后官方开源的了 ICP 的实现代码,在沿用 ERC-20 的情况下更贴近了官方的做法,尽量实现兼容,也变得更为复杂,开源代码:https://github.com/dfinance-tech/ic-token/tree/ledger/src。

DFINITY 的 ICP 实现用中,账户使用的是 account ID,而在该实现中使用的是 Principal ID,关于两者区别我在《对DFINITY的去中心化身份、账户与钱包介绍,开发者能如何利用?》中有过介绍,关于两者的选择社区也不同的意见。

韩国政府召开紧急会议 讨论如何遏制加密货币投机:首尔12月13日电 韩国政府周三召集了相关部委的紧急会议,讨论如何在当地投资者日益担忧财务损失的情况下遏制加密货币投机。会议汇集了司法部,财政部,科学部和ICT部,金融服务委员会,韩国通信委员会,公平贸易委员会和国家税务局的高级官员。比特币和以太坊等加密货币近年来迅速普及。韩国是世界上最大的比特币交易所之一,约有100万人拥有最知名的数字货币。[2017/12/13]

最大的区别在于增加了记录转账历史消息的数据库:因为代币同样也是 DFINITY 上的智能合约的实现,因此和 ICP 存在同样的问题,即以数据最终一致性为先,而区块上查不到交易信息。因此必须在容器内建立数据结构来保存 message。在核心代码下找到 OpRecord.mo,每一次转账、铸造、销毁、approve 的操作都以一条 OpRecord 的记录,一条 OpRecord 下有详尽的相关信息,方便用户日后查询。

在此前我们多次聊过扩容问题,同样在代币标准中又出现了。因为现在的需要在智能合约中保存代币的转账记录,这将是非常庞大的数据,而 DFINITY 目前只支持最大 4GB 的容量。

实际上所有 DFINITY 的应用都会遇到容器容量限制的问题,终极解决方案是实现一套自动扩容的数据库基础设施,它会会在一个容器容量消耗殆尽前,把数据划分到新的容器里。

这个基础设施相当于一个标准化的数据库中间层,上层 DApps 可以直接调用数据库中间层的接口,而数据库容器的扩容问题由中间层。目前虽然有尝试去实现数据库引擎的 sudograph,但他目前更多是方便开发者自定义数据类型,还没有去尝试自动扩容。

当然短期内,也可以定期打包一些交易历史到外部静态存储中去,然后删掉 DFINITY 容器内的历史,只保留一段时间。而且 DFINITY 的 WASM 可能会支持 64 位,这样可以扩大单个容器的内存。

在《为什么说是下一代区块链,DFINITY的8大核心优势!》中介绍过,DFINITY 使用了反向的 gas 模型,以太坊上用户为自己的发送的交易付 gas,而 DFINITY 上由部署合约的支付 gas,普通用户不需要付手续费就能享受合约的服务,当然包括代币转账。

但可能会遭受潜在的攻击,如果有人恶意发出一大堆垃圾交易,或者不停地调用合约,又或者在你的合约里面塞满垃圾数据,消耗合约的存储空间与 gas,就会出现宕机。在代币合约上的直接表现就是所有人都无法转账,甚至可以利用这种 DDOS 攻击阻止大家交易,从而操纵市场。

DFINITY 的 ICP 代币在实现时考虑到了这一点,每次调用转账都需要扣去手续费,现在一笔操作回固定扣走 0.0001,来防止攻击。而代币合约在设计时,可以衍生出更多有意思的设计:

1、转什么币,扣什么币手续费。代币合约的每次转账、铸造等操作,都扣取或销毁一定的数量或比例的代币,这种方案非常简单,听起来很像以太坊上的通缩代币设计。

2、转币扣 ICP 当手续费,类似 ICP 自身的实现。

3、在以太坊上每个计算操作都有固定的 gas 消耗数量,开发者可以去估算一个操作消耗的 gas 数量。目前在 DFINITY 上还么有这样的接口,但是是可以实现的。而且 DFINITY 的 gas 是使用稳定价格的 cycles 支付。因此可以先估算操作需要消耗多少 cycles 来计算操作的单价,然后根据交易所中 cycles 与该代币的交易对,来扣取对应数量的该代币,实现手续费完全覆盖交易处理成本。

以太坊网络中因为 ETH 与 ERC-20 标准之间的差异,并且为了避免重入攻击,导致了 approve 这么一个额外的操作。但在 DFINITY 中,有人提议可以去掉 approve 功能,来提升使用体验,并提出来“订阅”的替代方案。并且这样也能防止攻击,因为在 DFINITY 模型下的 approve,攻击者可以发送一大堆 approve 来占满容器的内存让其宕机。当让也有一些人提出来反对意见,具体社区讨论可以查看:https://forum.dfinity.org/t/thoughts-on-the-token-standard/4694/4。

使用 Principal ID 节省空间

在《对DFINITY的去中心化身份、账户与钱包介绍,开发者能如何利用?》中我们介绍来 DFINITY 的 Principal ID 和 Account ID 两种类似的 ID:Principal ID 被用于容器的使用,而 Account ID 被用于账本,两者同源。目前 DFINITY 的 ICP 实现中使用的是  Account ID,但社区也有人提出希望在代币合约中使用 Principal ID。因为 Principal ID 更短,可以节省 25% 的空间。

语言选择

官方在 AMA 中表示,建议开发者使用 Rust 来编写对安全性要求更高的代码,比如代币合约。

管理合约控制者

因为 DFINITY 的合约允许升级,因此合约的控制者具备较大权力,甚至可以增发代币,回滚业务,因此需要更好的去管理控制者。可以把控制者分配给零地址让合约永远无法升级,也可以把控制者替换为一个 DAO,由社区集体管理。

感谢 DFinance 开发者的分享,DFinanace 正在建立 DFINITY 的代币标准,并帮助用户一键发行代币,并建立 swap 等金融基础。可以通过关注 https://twitter.com/DFinance_AI 获取他们的消息,也可以通过后续的测试链接铸造自己的第一个代币。

标签:FINDFIICP区块链Neonomad FinanceYfDFI FinanceICP价格区块链通俗易懂的说法

以太坊交易热门资讯
GEN:美SEC未将加密货币确定为即将出台的监管目标

美国证券交易委员会(SEC)在最近发布的春季监管议程清单中,将比特币和加密货币监管排除在外。 尽管在此之前,SEC主席Gary Gensler表示,如果交易所受到监管,散户投资者将受益.

1900/1/1 0:00:00
BTC:金色观察 | 中国出台挖矿打击措施后 BTC哈希率下跌近50%

概要1. 根据Block Research数据,在一个多月里,BTC哈希率里下降近50%.

1900/1/1 0:00:00
DEFI:DeFi衍生品的困局与突围

以往的去中心化衍生品因受以太坊Layer1的诸多限制而无法真正做到可用。衍生品交易由于自带杠杆属性,放大资金使用率的同时也导致了其所能承受的波动相对更小,换句话说就是对市场价格变动的反映更加灵敏.

1900/1/1 0:00:00
比特币:“美元化”失败 或成比特币法定化“破口”

比特币成为一国的法定货币,其主权货币体系将一分为二,后续所带来的冲击与状况更将层出不穷,难以承受。此断非主权国家的理性选择.

1900/1/1 0:00:00
PIT:金色观察丨2021年哪里加密独角兽最多?答案或许是欧洲

金色财经 区块链6月15日讯? ?与2020年相比,2021 年赢得“独角兽”地位的欧洲初创公司数量翻了一番.

1900/1/1 0:00:00
THOR:投资教父:比特币比黄金值钱多了 巴菲特不买是因为他老了

凤凰《封面》|对话赛富亚洲投资基金创始管理合伙人阎焱出品:凤凰网财经《封面》主持人:陈琳  制片人:陈琳  执行制片人:鲁婧涵文:鲁婧涵核心提要:1.

1900/1/1 0:00:00