一个新的经济引擎
我们一直在努力

新经马赛克技术解读及误区分析

马赛克和马赛克交易

新经NEM最初发布时, 并没有马赛克(mosaic)功能。马赛克这一颇具特色的功能是在2015年底发布的,我们因此重新编辑API,创建第二个版本,让它实现来支持马赛克类型的交易的同时对原有API的执行无任何影响。然而可能是程序开发人员做的还不够多,也可能是马赛克交易量太少,我们并没有发现关于它的执行中会造成任何问题或困惑。

随着NEM的新功能的不断涌现,越来越多的马赛克类型的交易予以实施。马赛克的使用中,尤其对马赛克交易在查询环节的解释上渐渐让人产生了一些困惑。这可能是由于当马赛克第一次出现的时候,我们没有把它的解析方式讲解清楚。

我们将用简短的篇幅来解释马赛克的概念和交易查询的解析。

 

 

马赛克的概念

马赛克代表了一种资产类型。在NEM中,新经币自诞生起仅以数字货币方式定义。在设计和引进马赛克之前,它被简单的称为XEM。2015年底引进马赛克功能后,我们又得以重新定义XEM为一种马赛克,以确保马赛克的设计是符合NEM资产准则的。它被命名为NEM:XEM,这个命名完全符合XEM加密数字货币的使用习惯。XEM是NEM公共链上的默认存在的马赛克。

 

 

仅涉及XEM的交易

在引入XEM概念之前,NEM的API接口具备一个简单的返回值——Amount,该字段被简单定义为microXEM(XEM的最小单元,百万分之一XEM)的发送的数量。比如说Amount为2 750 000,则意味着交易中存在2.75XEM,实际XEM发送量=Amount值*10-6

 

 

含有马赛克的交易

马赛克概念引入之后,如果一笔交易中没有附加马赛克,那么amount字段仍然按照microXEM标准发送。查询一个典型的不包含马赛克的交易,返回结果如下:

{“meta”:{“innerHash”:{},”id”:104287,”hash”:{“data”:”1f04b1a6f26141731d4395715d39cc3bfeb555a42b98414c0a8a26013235ab78″},”height”:842056},”transaction”:{“timeStamp”:61094674,”amount”:2750000,”signature”:”fccb733774d739e866fc911797886426e79095d95fb14ba161fbfac605d4353f240443e5494d07d0625682584e54cf76b56740f891b309bcd17a156d57b6cc04″,”fee”:1000000,”recipient”:”TDFVQF7423HQZIFLTJZAGFFNDJWYXUL5C5TBS3O2″,”type”:257,”deadline”:61098274,”message”:{},”version”:-1744830463,”signer”:”7eca34cc2b4e24bc823b85b1ba1428551ef4e102816daa52da61c4884eff07ed”}}

实际数量是基于返回字段中的 Amount*10-xem_最小单元 = 2 750 000*10-6 = 2.75XEM

以上方式在大多数程序中已经被正确使用和解析了。但当涉及马赛克的情形下,如果我们不了解返回字符串的全部含义,我们可以能会对它的解析方式感到困扰。

那么当一笔交易中存在一组马赛克发送时,情况又是什么样子呢?我们又该如何解析查询接口返回的字符串呢?

在构建一笔涉及XEM的交易时,amount字段默认为1 000 000的倍数,可分割性为6(divisibilty=6),即:以10-6 XEM为最小分割单元的默认值。一般提到amount的时候,它的单位指的就是这个最小的单元。,我们称其为发送了一粒马赛克。

在纳米钱包里,如果使用者要发送XEM和一些其它的马赛克资源,发送界面中会不包含原本的amount值,而只需要XEM数量。而在区块链浏览器的交易数据中,如果以马赛克的方式发送XEM,amount值默认最小单位1 000 000,一个当量即 1 000 000*10^-6=1 XEM, 代表1个完整的XEM。

如果以附加马赛克的形式发送XEM,我们在区块链浏览器中能看到NEM:XEM的计量方式也会像其它的马赛克一样,具备一个精确到最小计量单位的输出,但同时会赋予一个以XEM计算的精确到1XEM的输出。下面举一个例子,我们有三种马赛克,lee:usd 和switcher:usd, 两者次幂数为4(即4位数,相应divisibility=4,注:下面计算公式会用到),而nem:xem应除次幂数为6(即6位数,相应divisibility=6)。 一个典型的含马赛克的交易查询结果如下:

{“meta”:{“innerHash”:{},”id”:104286,”hash”:{“data”:”b04b80bdf98ab2a08e74beedfd3ecb94fe028bc1e33b47242a5940a0cfcef01e”},”height”:842050},”transaction”:{“timeStamp”:61094244,“amount”:1000000,”signature”:”85c70c7139d1003a591a5ce97e6dd725f606b46db672e2853d9cd3e01e14e40150fe3d0bb1623452455d2ecb6693c5670073d911f61ed344bf5b2c704f46fa03″,”fee”:3000000,”recipient”:”TDFVQF7423HQZIFLTJZAGFFNDJWYXUL5C5TBS3O2″,”mosaics“:[{“quantity”:329000,”mosaicId”:{“namespaceId”:”lee”,”name”:”usd”}},{“quantity”:1200000,”mosaicId”:{“namespaceId”:”nem”,”name”:”xem”}},{“quantity”:730000,”mosaicId”:{“namespaceId”:”switcher”,”name”:”usd”}}],”type”:257,”deadline”:61097844,”message”:{},”version”:-1744830462,”signer”:”7eca34cc2b4e24bc823b85b1ba1428551ef4e102816daa52da61c4884eff07ed”}}

上面字符串的解析如下:

一个(定义为“amount”)马赛克交易中包含32.9 Lee:USD, 1.2 nem:xem, 和 73 switcher:usd。

数学上,计算方法为:

Amount * 10-XEM_divisibility * Mosaic_quantity * 10-Mosaic_divisibility

因此,lee:usd等于:

1 000 000 * 10-6 * 329 000 * 10-4 = 32.9 lee:usd

类似的,nem:xem等于:

1 000 000 * 10-6 * 1 200 000 * 10-6 = 1.2 nem:xem

最后,switcher:usd等于:

1 000 000 * 10-6 * 730 000 * 10-4 = 73 switcher:usd

 

 

容易解读错误的交易类型

下面这种情况,如果使用者对马赛克类型交易的解析不是特别了解,那么就会遇到问题了。

如果某个人发起马赛克类型的交易nem:xem马赛克,并以声明amount的值为3 300 000 000 000, nem:xem的quantity值为1,即每一份代表0. 000 001个当量,这笔交易将得到如下反馈:

{“meta”:{“innerHash”:{},”id”:669214,”hash”:{“data”:”6931a95a61ddcba458646b9514999239306c555cb346aa8541576317baa759e7″},”height”:1006775},”transaction”:{“timeStamp”:60977922,”amount”:3300000000000,”signature”:”65b53b6af17e57e711367521b256c4197a595ac899c9ed5178dd05e7a523cb9c4f4970e255cfca5f56bc48f698360806189bfd72bc8e40117d51e47317a64202″,”fee”:10750000,”recipient”:”NBZMQO7ZPBYNBDUR7F75MAKA2S3DHDCIFG775N3D”,”mosaics”:[{“quantity”:1,”mosaicId”:{“namespaceId”:”nem”,”name”:”xem”}}],”type”:257,”deadline”:60983022,”message”:{“payload”:”37363062393836366237643530643231″,”type”:1},”version”:1744830466,”signer”:”a08f4a45042f1f85fd6bdb705750d24927556ca38175500cdb12f3f565915ef3″}}

对应的解析如下:

3 300 000 000 000*10-6 = 3 300 000 个 nem:xem 且每一个的量为 1*10-6

它的实际含义相当于:

3 300 000 000 000*10-6 *1*10-6 = 3.3 nem:xem 或 3.3 XEM

这类的交易方式并不符合我们建议的交易法则,但是由于NIS兼容性非常好,它一样会接受这类交易。在我们区域链上的分布式账本记录里,能清楚的看到产生了3.3XEM的交易,并且这个交易是完全有效的。那么接下来的工作就是程序利用好API去正确解析了,按照上文解释的方法来解析就可以。如果按文中的方法正确解析,这类交易中的数值就不会发生错误。实际上,这类交易的结构和定义和文中解释的内容是基本一致的 。而对以上运算规则的误读,比如忽略quantity参数的作用,可能会将3.3XEM的马赛克误定义为330万XEM

 

 

声明

马赛克类型的交易是NEM区块链技术中非常重要且有效的特性。通过上面的例子可以发现,在交易中通过使用马赛克可以提供有效的应用程序中替代资产的解决方案,这种方式简明有效,为非XEM资产在NEM区块链中的寄存和传输提供了有效途径。

 

 

在此我们需要提醒试图尝试挑战NEM科技的技术达人,欢迎您随时随地访问新经的测试区块链网络进行技术实验和探索,我们将很乐于为提供有效bug的个人和组织支付酬劳和奖励。请勿利用交易所或其他合作伙伴对参数解读的偏差进行敲诈勒索!大部分数字货币交易所遵守所在国的KYC实名条例,将对触犯所在国刑法的行为保留依法追究的权利。NEM.io Foundation(NEM国际组织基金会)是遵从新加坡法律的实体组织,将依法和合作伙伴一道维护数字货币运营的公正性。

 

作者: Lon Wong (黄伦)

翻译: NEM中文社区 随风 Ronel

分享到:更多 ()

一个新的经济引擎-NEM

加入QQ群英文官网