Save
Saving
  • O
    onchonch123

    As mobile internet technology continues to mature, the emergence of blockchain technology represents the upcoming post-mobile era. In fact, blockchain is a critical innovation for our generation. Despite currently being in an early stage of development (to the extend of being percieved as mysterious by the public), blockchain has a promising future. Subsequent to the previous two blockchain articles I published, this article aims to elaborate on the heart of blockchain – smart contracts.

    What is a smart contract
    The term “smart contract” was first coined by Nick Szabo in 1995, loosely defining it as a digital contract that is executed automatically.
    A sales contract can be used as simple example of a smart contract. Two parties, a buyer and a seller, agree to terms of sale, such as price, delivery option and payment method. Once the seller has commited to send products to the buyer, the smart contract is updated, and the buyer’s payment is made automatically. Whenever a predetermined condition or term is met (such as confirmation of a sent parcel), the smart contract will execute in accordance.

    Blockchain technology is evolving rapidly, with more value being generated by its applications with each iteration. Smart contracts are not only automated traditional contracts, but play a critical role in the world of blockchain. Below, I explore the future of this revolutionary technology through a technical analysis of Ultrain’s Blockchain 3.0 smart contracts.

    Smart contract technical analysis
    Ultrain's contract system does not allow other contract’s code to be embedded in custom contracts, but Ultrain does provide three methods to call code from other contracts, which we explore below.

    1. Action.requireRecepient()
      The Action.requireRecepient() method requires an action from a specified recipient. This command calls the deployed smart contract with a specified name.
      As an example below, we have written and deployed two contracts. In Figure 1, a contract was deployed on account “jack”, requiring authentication (Action.requireAuth()) from“rose”. The other contract, seen in Figure 2, was deployed on account “rose”and uses Action.requireRecipient() to validate the received notification from and “jack”.

    0_1547691810374_950f7b5e-cd2e-4670-8960-f2152e3267c4-image.png
    Figure 1
    0_1547691819893_0384eb27-7efc-416e-9351-eda730fed2c5-image.png
    Figure 2
    We can test our calls by initiating a transaction. If everything runs smoothly, the log will show that both “jack” and “rose” recipient methods were called.

    0_1547691836559_4d752cd2-a1d1-44a8-af12-c34d67de90de-image.png

    We learn from this that:
    (1)The recipient with the name “jack” has been called.
    (2)The parameter transmitted is inconsistent with the parameter,“messi”, initiated by the transactions.
    (3)Both the recipient methods of “rose” and “jack” will be called within the same transaction.
    (4)Both “rose” and “jack” control their own permissions

    1. Action.sendInlin()
      Based on the testing result of Action.requireRecepient(), we can see that requireRecepient() has some limitations. Action.sendInline() is a method that solves this issue and allows any parameter to be called. Here is another explanatory example, again with two contracts, “rose” and “jack”:
      0_1547691846801_0dcd959e-3013-4ec2-9fb2-5b05bc45d8f2-image.png
      rose Contract
      0_1547691863662_f33a3412-3b75-434e-afe5-2e1575e996e2-image.png
      jack Contract
      Contract “rose” uses the Action.sendInline() method and delivers arbitrary parameters (params) to “jack” once executed.
      We can see in the execution log that “jack”’s “name”value has changed in accordance “params”specified in “rose”.
      0_1547692019357_597a63fb-be77-48b7-b988-a7b9bb1466f1-image.png
      This indicates that sendInline() can be used to call any method in any contract. Permissions are controlled by each contract independently, similar to the previous example, and the change is executed within the same transaction.

    2. Transaction.send()

      We saw in the previous examples that the actions specified in requireRecepient() and sendInline() are executed within the same transaction. This leaves the possibility for a mistake to result in the failure of an entire transaction. Transaction.send() is a perfect solution to this potential issue.
      The following picture demonstrates how this method is used:
      0_1547691910972_2a124a99-e633-4212-9a34-d50050130386-image.png
      rose Contract
      0_1547691919366_bbe55182-6dc1-47fc-8722-71c64e7be98a-image.png
      jack Contract
      We can execute the deferred methods specified in “rose”even after the contract has been deployed. Please note, the active right of rose to must be assigned to utrio.code, otherwise the request will not successfully exeucte.
      Once this method is conducted succesfully, we see rose’ log informtion(see Figure 3), but where is jack’s? We find it within the nodes (see Figure 4).
      0_1547691877757_b8ad0b91-7852-41e2-b8ea-ae47d9de6565-image.png
      Figure3
      0_1547691888676_dfec72aa-e5d5-4912-95e5-edf458548c47-image.png
      Figure4

    From above we can see that Transaction.send() has the following charateristics:
    1)Transaction.send() can call jack from any method.
    2) the method allows execution outside of the same transaction
    3)A called method can transmit any parameter
    4)when the jack method is being called, it has the same permissions as rose at initiation

    The table below recaps the charateristics of the methods described above. Each method has different strengths and weaknesses, and are therefore suited to their own specific circumstances.

    0_1547692227496_21ca6ef4-2852-48bd-acb7-22741a2e5a4f-image.png

    In summary, our analysis above clearly demonstrates the important role of smart contracts play in the Blockchain 3.0 era, by allowing flexible and secure computations on a decentralized system. Hopefully you have also glimpsed the power of Ultrain’s smart contracts.

    Ultrain, a pioneer of next-gen blockchain projects, has made many improvements and breakthroughs in existing smart contract technology. Ultrain contracts are far beyond the requirements of traditional contracts and can realize increasingly complex business logic. They can be used for technical intercommunication that builds bridges between various industries. For this reason, blockchain technology is an essential component required for creating a business empire with high performance, low cost, high service quality and support for large-scale data assetization.

    posted in Technology read more
  • O
    onchonch123

    0_1547015960799_6fa53ba4-1521-4d87-b0fb-944962b2b102-image.png

    Dear Ultrain community members,

    We would like to thank you for your continuous support of the Ultrain testnet! Several miners have already begun mining operations since the announcement of their selection last December.

    New mining-data lookup function

    We are pleased to announce a new online mining-data lookup function that is increasing transparency by making mining-data available to the public.
    Click the link below for detailed inquiries:

    https://explorer.ultrain.io/proposers?chain=TestNet

    Each user is ranked based on the number of blocks they have created, as can be seen in the image below:
    0_1547015981712_d743efe7-1087-4ef4-9022-272bcd93d33d-image.png

    Users can review their mining status and details on a daily basis, after logging in with their account details:
    0_1547016020116_3d0ec3b4-8c31-46d7-b924-1914cb581684-image.png
    The time and date of each block is also visible:

    0_1547016037408_f4845874-8697-4f5d-a2cc-902c5652f545-image.png
    We encourage and welcome all miners to use our new lookup function!

    Second round testnet application

    The second phase of Ultrain’s testnet miner recruitment is now officially open! Community members have another opportunity to join Ultrain’s testnet, so submit your application soon to get involved. All new miners will provide computational power for the operation of Ultrain’s testnet, filling a crucial role in Ultrain’s technological development and helping to complete testing prior to mainnet launch later this year.

    Testnet participation reward program

    We have prepared a generous reward program to incentivize miner participation. The program is effective as of today.

    1、 Each miner is ranked on a weekly basis based on the number of blocks they produce, and be rewarded accordingly.

    · 1st — 3rd: each winner receives 0.8 UGAS/block

    · 4th-10th: each winner receives 0.5 UGAS/block

    2、 Each miner is ranked based on their aggregated monthly output of blocks at the end of each month.

    · 1st — 3rd: each winner receives a mid-size Supernova mascot

    · 4th-10th: each winner receives a small size Supernova mascot

    *Limited Time Offering: Valid until Ultrain’s mainnet is launched on line

    We welcome all interested parties to apply for our testnet via the link below!

    https://www.ultrain.io/miner-registration

    posted in News read more
  • O
    onchonch123

    0_1547015803211_9b914b89-690f-4039-8bdb-6ab2a1114fdf-image.png

    亲爱的Ultrain社区成员们:

    感谢大家对于Ultrain测试网一直以来的大力支持!自2018年12月26日Ultrain公布测试网矿工入选名单以来,已有多位矿工于Ultrain链上展开了挖矿行为。为使矿工挖矿数据公开透明化,Ultrain已全新上线挖矿数据查询功能,用户可点击此处查询:

    详情:

    按照出块高低,排行如下:
    0_1547015824018_af42a1d9-c6f0-4770-a4a3-6a32f9de9ce8-image.png

    进入账户详情后,可查看挖矿详情,查看每日/累计出块数据:

    0_1547015848860_6bd02ce0-80bd-45d7-8a68-08d3020697c7-image.png

    并可于下方查看每个块出块时间及块高:

    0_1547015859149_3c5c8e64-bff5-4d12-87db-65724e1e51fe-image.png

    欢迎各位矿工查看!此外,为让更多的社区成员们有机会加入Ultrain公开测试网络中,为Ultrain测试网的运行提供算力,提前预览Ultrain技术概貌,与我们共同完成在公网上的Ultrain区块链技术测试,Ultrain宣布正式开启第二期矿工招募!我们还为矿工准备了丰厚的奖励机制,即日起生效:

    1、我们将以矿工出块数量进行每周排名,以周为单位进行奖励。

    出块数量排名1-3名,每人每块以0.8Ugas进行计算;

    其余则每人每块0.5Ugas进行计算。

    2、我们将在每月月底对矿工整月出块数量进行综合排名

    月度出块数量排名:

    1-3名:每人奖励Ultrain吉祥物公仔(中号)1只

    4-10名:每人奖励Ultrain吉祥物公仔(小号)1只

    *有效期限:主网上线之前

    欢迎有意者点击此处申请加入!

    posted in 资讯 read more
  • O
    onchonch123

    Ultrain Chief Cryptologist, Husen Wang
    As we all know, the core feature of blockchain technology is that any data stored on blockchain is non-malleable, and any state transition is transparent to everyone. Based on these features, blockchain technology can help solve many controversial problems, one of which is fairness.

    Fairness means that everyone is treated fairly, which means that all transactions are selected and executed with equal probability, with the same opportunity to participate in the competition and treated the same way. In reality, numerous businesses require fariness in the core, such as gaming, jurors and military conscription. In tradition, the process is vague due to technical limitations, which bring about controversies. For example, in League of Ledges, the probability of critical attack is crucial to the game, but the underlying mechanism is not transparent and unproven.

    On December 5, 2016, the Ministry of Culture of People’s Republic of China released the Notice on Regulating Online Game Operation and Strengthening Concurrent and ExPost Supervision that ”game operators shall timely and truthfully publicize the information regarding the Random Events including names, functions, content and quantity of the virtual items 3 or other similar services offered in the Random Events as well as the probability of winning and the results”. However, there is no evidence for complying the rule as to online game vendors.

    We use blockchain to solve this problem by the following way

    1, the random number can be generated and verified with free particiaption

    2, the game logic such as card shuffling service can be made transparent with smart contract

    In this way, everybody can audit the execution and result at any time, with impossible interference from game vendors, thanks to the non-malleability of blockchain technology.

    For the first one, there are several existing solutions:

    1, centralized random source

    Thermal noise and clock drift in electronic circuits, mutually exclusive events in Photons, Fluctuations in vacuum energy, etc. However, these random numbers are required to be provided by the people who samples such noice and impossible to verify, thus not appropriate for public use.

    2, PoW blockchain Block header

    In order to solve the difficult problem in PoW blockchains, miners need to guess a random number to generate required blockhash such as a pre-established number of zeros. Since the miner invests considerable resource into the mining process, the probability for giving up is small. However the security level is co-related with the difficulty of such PoW, for weak PoW such as IOTA, the manipulation of block header is inevitable. Besides, considering the fork probability, the confirmation time for such random number is usually quite long.

    3, DPoS Block header

    Unfairness and collusion is hard to prevent in DPoS, since the block proposers are pre-selected and limited in numbers. The block proposer has motivation to manipulate the transactions in a block to generate desired block header. They can even produce necessary transaction by themselves. Even for commit-reveal scheme, by selecting the revealing transactions, the final random number can be manipulated.

    There are some misused random number in EOS games.
    0_1547015272558_2527e161-22a7-4e39-a01c-fc398952575b-image.png

    0_1547015296905_e0323654-139b-47c8-8305-72ac0982c9ff-image.png

    https://github.com/generEOS/eosio.random/blob/master/random.cpp

    4, users’ secrets

    If different users hold secrets against each other, it would be possible to generate random numbers based on combined secrets. This idea is similar to Diffie-Hellman Key exchange, which generates shared secret key based on committed random number.

    There is a commit-reveal scheme in Blockchain too. However, the two-phase scheme brings too much latency (nearly 6 block time without considering fork). Besides, free choice of committed value may cause potential risk to final random number in case of collusion.

    The nature way to use random number is actually users’ secret keys. The public keys are committed values. Such secret is confidential to each user, otherwise the money in the account would not be safe. By deriving random number from such secret and combine them together, the randomness can be guaranteed.

    In Ultrain, based on RPoS consensus algorithm, we designed our random number generator as a primitive, with the following advantages:

    • Safeness, the block proposer in RpoS is randomly selected, which guarantee the fairness, avoiding manipulations by proposers, compared with DpoS and blockchains with weak PoW such as IOTA/Litecoin.

    • Randomness, combing randomness from secret keys and avoid manipulation by using Verifiable Random Function. Advanced shifting and pool controlling mechanism to reduce manipulation.

    • Fast generation, low communication & computation overhead, avoiding communiation complexity in Dfinity.

    • Fast confirmation, RPoS uses BFT based algorithm without forking, avoid waiting time in Bitcoin/Ethereum/Dfinity.

    What’s more, Ultrain provides extra security enhanced layer in smart contract level for specific business solutions.

    Demos are available right now. Any team with interests can get in touch with us through Ultrain.io.

    posted in Technology read more
  • O
    onchonch123

    Ultrain首席密码学家:随机数的原理与应用

    作者:Ultrain首席密码学家 Husen王虎森

    众所周知,区块链技术的核心特点,就是任何数据存储到区块链网络后,这些数据,以及对数据的操作过程,都是不可篡改,不可删除,不可销毁的,同时对所有人都是透明可查阅的,所以可以信任该数据的真实性,可靠性。通过这个技术特点,区块链技术可以帮助商业社会解决问题之一,就是公平性的问题。
    公平性,就是指所有人都被公平地对待,即请求都被同等概率地选中、执行;在多人竞争一个利益时,在统一的规则下,人人都有同样地机会参与竞争,并被同等对待。
    在现实世界中,存在无数的核心是“公平性”的商业行为,比如车牌的摇号、买房的摇号、彩票的摇奖,卡牌游戏中的抽牌,德州扑克等牌类游戏的发牌等等。在传统的技术手段下,往往由于技术的限制,导致过程的不透明,从而让参与的各方产生非常大的争议和诟病。比如针对常见的抽卡类游戏(Gacha),游戏的机制之一就是通过花费法币抽卡牌,卡牌根据珍稀程度不同(也就是抽中的概率不同)从而能力不同,越稀有的卡牌能力越强,而玩家就会经常抱怨某种珍惜卡牌抽到的概率太低。针对这个问题,2016年中国文化部特意发布了《关于规范网络游戏运营加强事中事后监管工作的通知》,该通知中首次表示:2017年5月1日起,网络游戏运营企业应当及时在该游戏的官方网站或者随机抽取页面公示可能抽取或者合成的所有虚拟道具和增值服务的名称、性能、内容、数量及抽取或者合成概率。但这个规定是否严格执行,由于所有的程序都是运行在游戏厂商的服务器上,所以只能靠游戏厂商的自觉来保证执行,玩家只能信任或依赖厂家。
    我们采用区块链技术通过实现两点改变,就可以完美的解决这个问题:

    1. 将游戏的抽卡业务逻辑完整的基于智能合约实现,落地到公链上;

    2. 将抽卡逻辑中的随机数生成逻辑基于区块链技术实现,落地到公链上;
      通过这两点,抽卡的逻辑在编写完成后,将不可篡改,不可销毁,可以供网络上所有人进行检查和校验,同时所有的运行结果也将被记录,游戏厂商完全无法对运行结果进行干预和操纵。
      为了实现公平性,首先,抽卡业务的智能合约应该运行在一个完全的去中心化的区块链公链之上,避免类似中心化或半中心化技术中存在的人为因素的干扰,其次,该随机数生成机制也必须是不存在漏洞和公平的。
      其中保证第一点的实现,就是选择一条真正去中心化架构的公链即可,而第二点是我们今天想重点讨论的,如何在区块链上实现一个公平和无漏洞的随机数生成服务。
      在区块链上实现随机数生成服务,我们可能可以有三种技术方案:

    3. 引入外部真随机数源:
      CPU里通常会有真随机数生成器(Ture Random Number Generator,简称TRNG)。真随机数生成器通常是通过放大电路的热噪声来产生随机数。我们知道温度高于绝对零度的原子都存在热运动,在集成电路里这些原子的热运动会在电路里产生噪声,噪声会使得电路中的电压存在微小的起伏,TRNG就是通过放大这些微小的起伏来产生随机数。但是,这种随机数的生成方式是一种中心化的方式,在区块链上并不适用,因为除了随机数的生产者外,其他人无法证明该随机数的生成是否是可信的,还是被杜撰的;无法在众多节点中对该随机数的真伪达成共识;

    4. 通过区块链系统中的公开种子生成:
      区块链输入有两个,交易和矿工引入的nonce。对于PoW,nonce是为了帮助PoW能产生符合本轮要求的hash值,矿工本身需要的计算强度很高,假如想对nonce操纵的话,相当于加上额外的约束进行挖矿,挖矿难度会极大的增加。而假如采用块头作为随机源,因为矿工每次生成块头的成本很高,所以很难多次尝试。但是在算力比较少的PoW公链上,生成块头的成本比较低,随机数的安全性就会大大下降。而且PoW有分叉的可能,所以最后生成的随机数需要足够长的确认时间,导致随机数的实时性不够。
      而在pos的链上,用块头的安全性,已经不存在了,因为该nonce可以只是简单的块高,生成块头的成本几乎为0.因而节点可通过不断修改交易组合,尝试生成不同的随机数。因而类似EOS块头为基础生成的随机数,都是容易被操纵,非常危险的。
      其中最常见的就是EOS在随机数方面存在的漏洞。如下是常见的链上伪随机数算法:

    0_1546593899226_c8201e91-1c57-4d89-a017-f8298ee7d69f-image.png

    0_1546593903406_1565434c-61a2-4183-ab4e-b0785add1105-image.png

    0_1546593913032_6a15f76f-1f50-4520-ac68-801d2ece4413-image.png

    以及广泛被引用的github代码:
    https://github.com/generEOS/eosio.random/blob/master/random.cpp
    以上案例,都有一个共同的特点,就是采用了 tapos_block_prefix, tapos_block_num 做为随机数种子。
    但是这两个值,其实是依赖于过去的区块经过确定性逻辑生成随机数,因而区块生成者就可以通过不断尝试打包的交易内容,甚至伪造虚假的交易,操纵最终生成的随机数。
    比如针对使用了以上这些存在随机数漏洞的胜率类的游戏,攻击者完全可以提前计算好结果,赢的时候投注,输的时候不投注,从而保证百分百胜率。

    总的来说,所有以用户输入作为随机源的随机数,都是有漏洞的。因为输入是可以被修改的,输入的数量和组合是可以被节点控制的,所以节点完全有动机和能力将随机数改为适合自己的组合。

    1. 整合多用户的主观随机源生成:
      还有一种随机数的生成方案,就是尝试整合不同用户的主观随机源作为随机数种子。典型的就是让多个用户各自提交自己的随机数,然后节点将所有提交的随机数组合生成最终的随机数。考虑到多个随机源的相互独立性,理想情况下最终结果依然是随机的。
      这种方案从设计角度来说可靠性很高,但是在实现过程中依然存在如下问题:
    • 多个用户可能相互观察,判断是否提交随机数,导致先提交的人有暴露风险。此问题目前通过惩罚机制解决。
    • 节点可能故意打包某些对最终结果有利的随机数。这涉及到共识的公平性问题,任何基于dpos共识的区块链系统都无法保证,因为参与共识的节点数少,所以节点可能合伙作恶即串谋,而且最坏情况是,所有提交的随机数生成交易都是由坏的共识节点自身控制的客户端,导致随机数结果完全被控制,而且这种作恶情况完全无法被观察到。Tendermint或者联盟链有同样的问题。

    对此,Ultrain结合自身RPOS共识算法的特点,设计了自己的随机数生成算法,避免了上述问题,下面概述Ultrain随机数生成的过程:

    • 建立随机数生成委员会,该委员会是一个开放的结构,其成员可随时加入和随时退出,所有想参与随机数生成的成员,都通过注册制注册为该委员会成员,同时将公钥注册到随机数生成智能合约里。
    • 每轮共识时间内(Ultrain为10秒),委员会成员提交本轮自己生成的随机数,该随机数要求必须通过VRF(可验证随机函数)结合该成员的私钥生成,从而避免随机数被控制。
    • 智能合约通过整合各成员提交的随机数形成一个随机种子,基于该种子生成随机数。
    • 对于注册参加的节点,不提交将受到惩罚。

    该随机数生成的过程具有如下的优势:

    1. 足够随机:因为VRF的结果是足够随机的,用户的私钥是相互保密的,所以最终结果是随机的。
    2. 生成速度快:相比较基于块头的生成方式,Ultrain每轮随机数生成时间为10秒,不需要等待确认时间,只有其他公链的生成时间的十分之一。 类似Dfinity的方法,则需要组内成员相互通信和验证,通信复杂度、等待时间和防串谋的难度更高。
    3. 足够安全:因为委员会成员是开放的,参与人员也是完全不固定的,极大的降低了随机数结果被串谋的可能性。对于参与人员,
      VRF限制了可以提交的随机数的可能,防止被操纵。

    Ultrain随机数生成器现在已经发布了Demo版本,所有希望试用的团队可以通过Ultrain官网ultrain.io与我们联系申请试用。

    posted in 技术 read more
  • O
    onchonch123

    作者:Ultrain联合创始人&CTO 李宁

    什么是区块链?什么是分布式数据库?相信很多人容易混淆这两个概念。表面上看,区块链和分布式数据库在基础技术方面有很多相似的地方,但也仅仅只是相似而已,接下来,我们将从本质区别、核心价值和存储技术三个方面来探讨二者的不同。
    一、区块链和分布式数据库的本质区别
    1、一致性的核心共识算法和冗余的数据存储:
    一致性的核心共识算法和冗余的数据存储是二者最为相似的一点,即便如此,二者在技术目的上仍存在本质区别。其中,区块链使用这些技术的核心目的在于构建一个尽可能去中心的、数据资产所有权永久保护和自由转让的世界;而分布式数据库核心目的则是尽可能构建一个逻辑中心,这个中心能对外提供高性能、低成本以及扩展性好的服务。

    2、不可能三角:
    二者都需要面对不可能三角的挑战,但二者所需要面对的具体挑战有本质的区别:其中区块链面对的是安全、去中心化和可扩展性;而分布式数据库面对的是对业务的支持度、工程实现复杂度和硬件要求。

    3、一致性:
    一致性在区块链和分布式数据库上对应的意义也不同:区块链系统中的一致性指的是多节点对数据状态的共同维护能力;而分布式数据库系统中的一致性指的是多个副本对外呈现的状态。

    4、共识算法安全级别的不同
    区块链系统解决的是拜占庭错误,主流算法有POW/POS(概率算法)和PBFT(确定性算法)。其中,POW/POS概率类算法的共识结果则是临时的,随着时间推移或某种强化,共识结果被推翻的概率越来越小,最终成为事实上结果。拜占庭类容错算法往往性能较差,无法容忍超过 1/3 的故障节点;而PBFT确定性算法一旦达成共识就不可逆转,即共识是最终结果。分布式数据库系统解决的是非拜占庭错误或故障错误,主流算法有Paxos和Raft,这类容错算法往往性能比较好,处理较快,容忍不超过1/2的故障节点。

    二、从核心价值探究区块链和分布式数据库

    区块链的核心价值
    区块链的核心价值不是对外提供服务而是构建自己的数据资产世界,区块链世界更新的是状态,存储的是可追溯日志,主要数据结构分为两类:交易和区块。具体体现如下:
    交易用于外部世界驱动区块链世界状态的更新,它又包含两类数据:交易输入和交易输出,交易输入指明了交易的数据资产来源,交易输出指明了数据资产的去向。
    区块用于存储交易数据,主要由区块头和区块体两部分组成,区块头中记录了版本号、上一个区块的Hash地址、merkle根、区块创建时间戳、区块的工作量难度目标以及用于计算目标的参数值,区块体包含交易数量和完整的交易数据。

    分布式数据库核心价值
    分布式数据库核心价值是对业务系统提供数据存取服务,其中业务数据库是面向操作的,主要服务于业务产品和开发;而数据仓库是面向分析的,主要服务于分析人员。

    三、从存储技术的角度解开区块链和分布式数据库的面纱
    区块链
    2008比特币到区块链3.0,区块链最基础的存储技术没太多的变化,下面我就举个比特币的存储原理的例子。
    Bitcoin/blocks/文件夹下形如图1中的blk00000.dat的文件为区块数据存储的文件,每个文件128M左右,此文件夹下存储了所有的区块数据。

    图1
    0_1545621040764_e18764eb-834d-48f8-90a6-1af929b3e9f3-image.png

    图2
    0_1545621051831_36363a57-b7f8-4e28-b917-90a900a23eb5-image.png
    每个区块最大是2M,区块数据存储在区块文件中(如图1中blk00000. dat),区块与区块之间利用“魔术数”分隔(如图3中的0xF9BEB4D9),一个文件可以存储多个区块数据,文件也有最大限制,大于128M左右就会重新创建一个文件(如blk00001.dat)。

    图3
    0_1545621058347_19cabcb9-e29c-48c1-b8d3-b956e37be44e-image.png
    分布式数据库
    分布式数据库从2005年左右开始,首先是NoSQL这波浪潮。这些数据库解决的首要问题是单机上无法保存全部数据,如HBase/Cassadra/MongoDB等。紧接着是RDMS的救赎,除了NoSQL之外,RDMS系统也做了不少努力来适应业务的变化,也就是关系型数据库的中间件和分库分表方案。然后是NewSQL的发展,2012~2013年Google 相继发表了Spanner和F1两套系统的论文,让业界第一次看到了关系模型和NoSQL的扩展性在一个大规模生产系统上融合的可能性。
    接上一篇区块链技术进化论,本篇从区块链和分布式本质区别,来进步剖析出区块链网络独特的核心价值,接下来将讲述为什么智能合约是构建区块链世界的核能,而不是对外提供服务的接口层,以及前面提到一系列区块链技术类和价值应用场景,希望让更多真正了解区块链并参与到区块链中,让区块链技术早日大规模赋能实体经济。

    posted in 资讯 read more
  • O
    onchonch123

    Ning Li, Co-founder & CTO

    Blockchain. Distributed database. These terms are often used carelessly, and, more often than not, incorrectly. Both blockchains and distributed databases have a similar goal of maintaining a consistent copy of a particular dataset across a number of nodes. Maintaining consensus on the data that is stored, as well as keeping redundant copies of this dataset, are the major similarities between the technologies.

    On the surface, their fundamental technology is quite similar, but that’s as deep as it goes. Similar does not mean interchangeable.

    This article will explore the nuanced differences between blockchain and distributed databases by focusing on three important aspects: intrinsic nature, core value proposition and storage technology.

    • The differences in nature:
    1. Centralized vs decentralized management.

    Public blockchains are a collaborative creation, with their ultimate goal being to create a world that is completely decentralized, and where the ownership of digital assets is protected and transferable at all times. On the other hand, distributed databases are centrally managed by a service provider. Their goal is to create a logical center, that can provide efficient, low cost services with great scalability.

    1. Trilemma:

    Both technologies face technical trilemmas, which is referring to the difficulty of optimizing a technology while balancing tradeoffs. For example, the blockchain trilemma is concurrently achieving high security, decentralization and scalability.
    I.e. it’s easier to achieve high security and scalability by sacrificing decentralization. Distributed databases face a fundamentally different set of issues. As a service provider, DD managers must consider business support, engineering implementation complexity and evolving hardware requirements.

    1. Consensus mechanisms:

    Blockchain systems attempt to solve the Byzantine Generals Problem with clever algorithms, thereby becoming Byzantine Fault Tolerant, or BFT. In short, this is how blockchains reach verifiable decentralized consensus, even with malicious nodes. The most commonly used consensus algorithms Proof of Work/Proof of Stake (probability based algorithms) and Practical BFT (deterministic algorithms). The consensus generated based on the probability class of PoW/PoS algorithms is temporary, meaning it can rewritten. As time goes by and additional blocks are added to the chain, the probability of overturning the previous blocks become smaller, approaching zero. Byzantine fault-tolerant algorithms often have poor performance, with a low tolerance of 1/3 faulty nodes.

    PBFT deterministic algorithms are irreversible once consensus is reached. That is, the consensus result will always be final.

    Distributed database systems rarely have to solve the Byzantine Generals Problem, since there is a central point of control that coordinates the whole system, but do have to consider system failures. Mainstream algorithms used by DDs include Paxos and Raft. These fault-tolerant algorithms tend to perform better and process faster, and tolerate faulty nodes that do not exceed over 1/2 of the network.

    • The difference in value propositions

    The core value of blockchain technology is not to provide rudimentary data services (like the decentralized database), but to build a new ecosystem of digitized data assets and automated trust services. The global blockchain updates its state autonomously, and data is traceable to its source.

    On the other hand, the core value of distributed database is to provide data storage and access services to business systems. The database is designed to provide operational-support, mainly for business products and development projects, with the data being stored with a focus on supporting analysis and retrieval.

    • Understand blockchain and distributed database through storage technology

    From the birth of Bitcoin in 2008 to the emerging generation of blockchain 3.0, the fundamental storage technology of blockchain has not drastically changed.

    The main data structures in blockchain are divided into two categories – transactions and blocks:
    • Transactions trigger updates to the blockchain’s world state. The transaction itself contains two types of data: input and output. The transaction input indicates the source of the data, and the transaction output indicates the destination of the data.
    • Blocks store transaction data. They are composed of a block header and body. The block header records important metadata, such as the hash address of the previous block and creation time stamp. The body contains the transaction quantity and complete transaction data.

    Lets look at an example using the storage principles of Bitcoin.

    The Bitcoin/blocks/ folder is formatted like the blk00000.dat file in Figure 1. This file stores block data and has a maximum size of about 128 MiB.

    0_1545620456989_3a7590f1-19f7-4384-bec2-d19e199fb6aa-image.png

                                                                             Figure 1 
    

    The Bitcoin/blocks/index/ folder stores the index data of all blocks, using the key/value pair database in leveldb (ldb) format, such as below in Figure 2.

    0_1545620476479_56c0d548-8d45-42b1-9766-18e9f8ac8991-image.png
    Figure 2

    Each block is at most 2MB, and the block data is stored in the block file (such as blk00000.dat in Figure 1). Block data is separated by a "magic number" (such as 0xF9BEB4D9 in Figure 3). The blocks/ folder stores data from multiple blocks, up to the maximum limit. If it is larger than 128MiB, a new block file will be created (such as blk00001.dat).

    0_1545620958022_a2e8e6ed-3eab-4b22-864e-c11939bc685a-image.png

    Distributed databases do not use blocks and transactions, as explained above.

    The first distributed databases were implemented around 2005, with the first wave NoSQL. The primary problem solved by these databases was that individual machines of the time lacked storage capacity to store all of the data on a single machine. Following the invention of relational database management systems there have been a lot of adaptions as business requirements have changed. New middleware products and sub-library schemes have continued to be developed, such as Hbase, Cassadra, and MongoDB. Googles publication of Spanner and F1 papers in 2012/13, showed the industry the possibility of NoSQL's scalability integrating with a large-scale production system.

    As mentioned in my previous article on the evolution of blockchain technology, I will continue a series of articles that further explain the world of blockchain. My goal in this article was to breakdown the difference in nature between blockchains and distributed databases, and in my upcoming article I will elaborate how smart contracts can be perceived as “nuclear power” for the world of blockchain, rather than an interface for external services. I will also describe a series of valuable applications for smart contracts.

    Ultrain, as a leader in blockchain technology, has a clear goal to share knowledge with different audiences and attract more participants into our growing community. Together, we wish to promote the large scale adoption of blockchain technology in our existing economy, and create a programmable business society.

    posted in News read more
  • O
    onchonch123

    Ultrain CEO Guo Rui

    Blockchain has been described as a revolutionary technology — that the technology born from Bitcoin will change our lives and guide us towards a future way of living. This hype is somewhat dampened, however, by the disappointing performance of existing blockchain infrastructure. Ever since Ethereum was introduced to the world, Blockchain 3.0 has been the ultimate vision that will fully realize the true value of the Internet. It is widely believed that a virtual business network, perfectly compatible with the concepts of decentralization, security, and ideal performance, will eventually be realized.

    We face the blockchain Trilemma, which describes the tradeoff between simultaneously achieving high performance, decentralization and security in a blockchain system. Optimizing this triangle has become the main focus of every public chain project on the market, though limited breakthroughs have been made in recent years.

    In a recent interview, Rui Guo, co-founder and CEO of Ultrain, expressed his opinion:
    “A lot of us are often too optimistic about the development of technology in the short-run, while remaining pessimistic towards our long term goal.”

    Guo stated this with great confidence in the future of blockchain technology, while also pointing out that Ultrain’s founding team “only focuses on the long-term value of blockchain technology… with dedication and commitment, blockchain can establish an innovative trust relationships, and execute transactions that generate great growth to existing enterprises… Such technological value, created to benefit our society, will scale up within three to five years…”

    Despite the global crypto bear market, Ultrain received funding from top venture capital investors, concluding a 20 million dollar private round in July, valuing Ultrain at 200 million USD. With laser focus, Ultrain is relentlessly continuing development of its ultimate goal, and achieving new milestones every week.

    Ultrain recently announced the official opening of its test network, allowing enthusiastic community members to contribute to the network from early December. DApp developers can already deploy their own Ultrain smart contracts to the testnet, verifying their functionality in a real blockchain environment. Ultrain is proud to be one of the first Blockchain 3.0 project with open test network worldwide.

    In light of the latest new progress, Rui Guo would occasionally recall the early days of Ultrain when the company was first formed. In a volatile market, the key to success is to build a company focused on technological evolution, rather than financial speculation. Guo first encountered blockchain in 2012 while working as Technical Director of the Alibaba Security Group, and was immediately curious about the technology. This spark of curiosity quickly ignited into a long term and firey passion, leading Guo to much personal experimentation with blockchain. When the popularity of the burgeoning blockchain industry entered new heights in May 2017, Guo made the decision to deepen his involvement. Using his accumulated expertise in the field, he quickly established a vision for the future development of blockchain that addresses the technical issues currently faced.

    Ning Li, working as the Chief Architect of the blockchain team at Ant Financial, hit it off with Rui Guo from the moment they met. Guo and Li decided to form a team and devote themselves to the revolution that is blockchain technology. Guo described the feeling at the time: “… we felt the excitement of an engineer who is eager to resolve technical challenge.”

    Such excitement did not blind the duo. After experiencing the exponential growth of Alibaba, Guo and Li recognized the importance of user engagement to a project’s success. Emma Liao, who was head of IoT investment at Qihoo 360 at the time, had the expertise and experience to drive a thriving ecosystem around the project.

    Soon after the three met for the first time, Ultrain was formed.

    The three entrepreneurs formed a solid and complementary triangular structure, covering each other’s weaknesses and complimenting each other’s strengths. A shared devotion to resolving blockchain’s technical issues, created a simple goal: to building a programmable business society.

    From that day, Ultrain was born.

    At this point, are public chains too dull to mention?

    As an innovator working on the cutting edge, Guo has a nuanced answer to this question. He explains that the approaches existing blockchain projects have to the “blockchain trilemma”, such as DFINITY, Oasis Labs, Algorand, Thunderella, and Zilliqa, can be classified into two groups: generate block prior to confirmation and generate block after confirmation.

    An example project of the former solution is DFINITY, and an example of latter project is Algorand. Both projects are well received with great attention.

    The solution chosen by Ultrain is logically consistent with Algorand, using a Verifiable Random Function (VRF) and Byzantine Fault Tolerance (BFT) as the core technology. The difference is that Ultrain has achieved further optimization with a self-designed Random Proof of Stake (R-PoS) consensus mechanism, as well as implementing an incentive and punishment mechanism based on token staking. The penalty mechanism increases the cost of a malicious attacks, improving the overall security of the Ultrain network.

    Traditionally, the basic VRF+BFT consensus process is as follows:

    The first stage is known as the Role Confirmation phase: at the beginning of each round of consensus, each node uses VRF to generate a credential. Nodes with a matching credential are then randomly selected to participate in the current round of consensus. Participants are split in to two groups: Voters and Proposers.

    The second stage is the Hierarchical Consensus phase: Proposers are responsible for generating candidate blocks. Blocks are then verified by Voters. Consensus is reached upon by the Voters of this round, and the candidate block is noted as being confirmed.

    The third stage is the Binary Byzantine phase: Voters vote on the candidate block, with the option of accepting or rejecting the candidate block if it is considered to have an error, such as double spending. If a block is rejected it is replaced by an empty block.

    The fourth and final step is to broadcast the blocks identified in this round to the entire network.

    Ultrain's R-PoS algorithm adds an ingenious mechanism to the VRF+BFT system: the Token Deposit Staking Mechanism.

    In the first phase, three inputs are made to the Ultrain’s VRF: the number of UGAS stake by a single node, the previous performance rating of the node, credibility of specific machines.

    In Ultrain’s R-PoS algorithm, the output of the VRF is used to confirm the roles of:

    Proposer node: the node responsible for assembling and generating the candidate block in this round. There will be multiple nodes selected as the Proposer node.

    Voter node: responsible for the next stage of voting and to confirm the identity of the Proposer node of each round.

    Notary node: Does not participate in the block formation stage, but records block data once a block is generated.

    The probability of a single node being selected as a Proposer or Voter node depends mainly on the input parameters of the VRF, as outlined above. The higher the parameter, the higher the probability of being selected. The machine credibility score (determined by a node demonstrating good behavior), as well as the token-based locking mechanism, greatly improves and guarantees the overall security of the Ultrain network. Algorand, which runs on an idealized model that assumes that 2/3 of participating nodes are credible, overlooks the "human nature" components of blockchain, which may limit the projects development.

    The Token Deposit Staking Mechanism allows Ultrain to determine the number of nodes participating in a particular round of consensus during the Role Confirmation stage by using the Fisher–Yates shuffle algorithm, where Algorand loses efficiency by electing a consensus committee based on probability.

    Ultrain implements another change to VRF+BFT in the second stage, transforming Hierarchical Consensus into a parallel consensus phase. The selected Proposer nodes assemble candidate blocks in parallel, and Voter nodes reach consensus on the Proposer nodes during the current round to determine if the candidate block is accepted by most of the nodes in the network.

    Having multiple Proposer nodes generating blocks in parallel improves the overall TPS of the system. In addition, parallelism improves the flexibility of the system. If a Proposer node is under attack, as long as a single node is capable of reaching consensus, the system will not produce an empty block. A parallel BA algorithm is used to overcome the technical challenge of voting on a proposed block, but this may result in network storms.

    To solve this problem, Ultrain introduces redundant coding technology to divide the message into multiple transmissions, ensuring that the most messages can be broadcast with limited network bandwidth, optimizing network throughput.

    In addition, Ultrain also introduces an aggregate signature algorithm that allows candidate blocks to be delivered in small chunks, meaning each node won’t receive the full block before voting is completed. Hiding the content of the message avoids collusion, improving the overall fairness of the system.

    Guo uses a simple comparison: “… picture EOS with their DPoS consensus mechanism as a large group of people voting for a fixed number of people to make decisions for them. The voting decision is based on the number of tokens held by individuals in a large group. In comparison, the R-PoS mechanism randomly selects a few nodes to make the initial block proposals, and then randomly selects 10 times more people to judge and review whether the previous proposal is correct or not.”

    The core idea of ​​R-PoS is to change the selection method of participating nodes from a trusted election method, such as DPoS, to a random selection method. This allows any node in the Ultrain network to participate in the consensus process, which not only protects the decentralization of the network, but also greatly improve performance.

    Ultrain released the conceptual network of R-PoS in July 2018, deploying 1000 nodes to the AWS cloud. The network was able to reach an average of 3000 TPS with a confirmation time of 10 seconds. This performance far exceeds other existing blockchain 3.0 projects.

    Ultrain’s Plan for 2019

    When discussing Ultrain’s plan for 2019, Rui Guo said that in addition to the launch of Ultrain's main network at the end of April, Ultrain will deploy wallets, DApps and mining machines within the year. The recent announcement of opening the testnet for public application indicates Ultrain is moving from the theoretical phase to a quasi-realistic scenario. Unlike Ultrain's cloud-based test network, the biggest challenge to a public testnet is the quality of each node, and achieving global distribution. These factors are critical for Ultrain to grow into “the world computer”.

    In the face of the deteriorating bear market, Guo believes that the emergence of a killer DApp is of the utmost importance to stabilize the market.

    Why hasn't there been a real large-scale commercial blockchain application?

    "The blockchain has a huge impact on business scenarios through establishing trust relationships and transactions," Guo said. "We believe that projects in sectors such as fan economies, healthcare, energy, and logistics will benefit from blockchain technology and grow manifold.”

    Guo anticipates the successful deployment of Ultrain’s mining rigs will see blockchain technology will be enter people's daily lives within five years.

    A technology is called revolutionary when it creates a fundamental change to our society. In Ultrain's perspective, finance, an industry that relies on a well-established trust system, is not the main battlefield for blockchain technology. To Guo, blockchain will greatly contribute to the logistics giants known in China as “Si Tong Ba Da”, and would mark a new chapter in the blockchain industry if adopted.

    According to Guo, Baidu, Alibaba and Tencent (aka, BAT) will not be the main players in blockchain. He adds his two cents: “BAT will not be the main character in the blockchain world, they will only be the followers to a leader”

    Recently, Ethereum founder Vitalik Buterin has expressed similar views publicly. Buterin believes that the so-called application of blockchain technology in many industries is actually a marketing gimmick.

    Guo recalls that during his tenure at Alibaba, the original platform management department played the role of controller, which reflected that BAT's is built on the centralization of control. The underlying premise of blockchain technology is precisely the opposite – decentralization.

    This notion of control limits BAT's approach to blockchain technology to micro-innovations, such as the "consortium blockchain". Such micro-innovation may lead to some system optimization, but could not be considered revolutionary.

    posted in News read more
  • O
    onchonch123

    Ultrain CEO 郭睿

    前段时间,BM 在 EOS 的电报群抛出了一个关于解决隐私性和性能问题的新想法,总结一下,就是希望通过一种新的设计方法,实现如下几个目标:完全去中心化,任何人都可以跑全节点,同时可以达到千万 TPS;没有 Token 质押和投票;没有 RAM 和 DISK 资源争抢炒作的问题,无需交易手续费。其实这几个目标,也是 EOS 被长期诟病的几个地方,估计也是 BM 一直想去解决的「心病」。

    首先,大家都知道 EOS 的共识机制 DPOS 的核心,就是通过每个节点质押的 Token 数量,在一个大规模的网络中选举出 21 个参与共识的节点,由这些节点之间进行共识,达成一致并出块,而不像比特币一样全网出块。EOS 每轮选举出 21 个节点,每 0.5 秒出一个块,3 分钟左右确认该块。据社区最新的 EOS 性能测试报告,其 TPS 约为 3000 笔 / 秒。

    但是,这种解决方案也带来了许多让人诟病的地方,其中最主要的有三方面,

    一、EOS 的 21 个共识节点都要求极高的机器性能,一个典型的 EOS 共识主节点的配置是 96 核 CPU+256G 内存,机器成本极高,可以视为是网络中的特殊节点,一方面让普通人难以参与到共识节点的建设中,节点数量有限;另一方面中心化的服务器部署很难抵御专业的大规模 DDOS 攻击,这个问题对 Google,Facebook 等互联网巨头来说都是一个棘手的问题,对 EOS 的 21 个节点来说也是一样,黑客可以轻易的通过 DDOS 这 21 个节点,瘫痪该网络;为了解决这个问题,最好的方法就是像比特币或以太坊一样,是一个完全对等的网络,就是网络中所有的机器,在网络中的地位都是对等的,没有类似 EOS 共识节点这样的特殊节点存在,从而人人都有能力可以部署一台全节点机器参与到区块链网络中,实现一个完全的去中心化网络;

    二、区块链强调的是完全去中心化和对等的网络,人人在该网络中都是平等的,不存在特殊化,而 EOS 的设计偏离了这种理念,让 21 个节点成为了特殊化节点,而 21 个节点的选择是由质押的 EOS 的 Token 的数量进行投票来决定的,由于成为 21 个节点之一会带来大量的经济利益和好处,EOS 的节点竞选中就难以避免的充斥着贿选,拉票,腐败和串谋,虽然 EOS 的支持者宣称这是性能提升带来的不可避免的妥协,但在区块链行业内对这种妥协并不满意;而解决这个问题最佳的方法,就是彻底取消有人为意志因素的投票方法,取消人为干预;

    三、EOS 现在的系统性能,是依赖 21 个节点的系统资源,同时由于区块链的特性,智能合约在运行时需要同时在这 21 个节点上并行运行,所以 EOS 运行的系统资源,主要是 CPU、RAM 和 DISK,是非常有限的,同时 EOS 又不收取代码运行的手续费,为了避免系统资源被无意义的浪费耗尽的问题,EOS 的经济体系是通过抵押 EOS Token 租用系统的 CPU、RAM 和 DISK 资源,这个时候问题就出现了,由于这些资源的总量是有限的,这些稀缺资源立刻导致了投机客的疯狂抢购,现在在 EOS 平台上,1 个日活 1 万的 DAPP,需要抵押的 Token,在现在的币价折合人民币约 350 万元,这远远不是一个普通的 DApp 开发团队可以支付的,从而导致 EOS 平台成为了一个 DApp 应用开发者特别不友好的平台。这个问题是必须解决的,否则除了博彩类的应用开发,其他种类的 DApp 都无法承受这么高的成本在 EOS 平台上运行。

    虽然 BM 在 EOS 电报群中只提到了他的设计理念,并没有提具体如何设计,但我们非常欣喜的发现,BM 的设计理念与 Ultrain 在这个方面的设计思考完全一致,而实际上 Ultrain 已经实现了以上三方面的技术设计和实现,这些功能已经在近期上线到 Ultrain 的测试网,并将在 12 月底上线 Ultrain 的准入制主网;

    首先,Ultrain 基于自主知识产权的 RPOS 共识机制,在一个完全去中心化的对等网络中已经实现了高 TPS 的设计目标,在今年 7 月 15 日发布的验证网络中,Ultrain 在亚马逊云 1000 个节点上已经实现了 3000TPS,与 EOS 在 21 个节点半中心化条件下到达的 TPS 数值相差无几;Ultrain 网络中的矿机是完全对等的,每台机器都可以是全节点运行。

    其次,Ultrain 的 RPOS 共识机制,每轮参与共识的节点是基于 VRF 算法的随机选择,其中抵押的 Token 数量只是 VRF 算法中的一个参数,所以每轮共识节点的选择并不像 EOS 一样依赖于抵押 Token 数量对应投票数量的多少,就可以决定本轮出块的节点;而是一个更加随机的过程,从而有效的避免了投票被操纵的问题,与 BM 提到的没有 Token 质押的投票的思路非常类似。

    第三,Ultrain 的经济体系,在设计之初就考虑到如何解决现有区块链经济体系中存在的核心问题:1. 矿工的收益随着全网逐步递减,导致矿机的军备竞赛 2.DApp 开发者的使用费随着使用次数和 Token 价格的增长而增长,而取消使用费会带来有限资源的炒作问题,都会导致 DApp 的运营成本完全无法控制;BM 在这里只提到了第二个问题,我们也先就第二个问题谈谈我们的设计思路。为了解决这个问题,首先需要解决的是系统资源稀缺性的问题,Ultrain 采用了主侧链的设计机制,主链上运行的是 Ultrain 用户的资产信息,而 DApp 应用是运行在每条侧链之上的,主链和每条侧链之间的系统资源都是隔离的,这就保障了系统资源可以无限扩展,在有新的 DApp 需求时扩展一条新的侧链就可以;而这带来的核心设计挑战是安全性的问题,每条侧链的机器数量与全网比起来毕竟是有限的,如何在有限的机器数量下保障侧链的安全性,Ultrain 采用了我们称之为「随机调度」的自主知识产权技术,组成每条侧链的机器并不是固定不变的,这些机器将在一定的时间内在全网机器中随机选择并替换,用动态性和随机性保障系统在去中心化的条件下的安全。在「随机调度」技术的保障下,DApp 的应用开发者在使用 Ultrain 网络时,只需要估算出自己需要使用的资源和时长,付出固定 Token 租用费,就可以使用 Ultrain 网络,更类似于「套餐」制度。

    在该设计下,与以太坊 DApp 开发者相比,Ultrain 的 DApp 开发者只需要付出固定的资源租用费租用资源,从而不需要承担 Token 价格上涨带来的成本;而与 EOS 开发者相比,Ultrain 的开发者不会面临资源竞争导致价格高涨的问题,从而保障 DApp 的开发成本完全可控。这里只是介绍了部分 Ultrain 的经济体系,近期我们会撰文详细介绍 Ultrain 的 Token 经济学体系设计。总体来说,非常高兴 Ultrain 在区块链公链设计上的思考能与 BM 一起产生共鸣,也希望有更多的开发者可以试用 Ultrain 的测试网络,请前往 https://developer.ultrain.io/ 了解更多信息。

    posted in 区块链 read more