NEM LIFE

暗号通貨(仮想通貨)NEMについての記事を記すブログです

非中央集権化:NEM vs Ethereum

以下は、
coinsessions.ph
を和訳したものですが、技術的内容も多く含まれるため正しく訳せているとは限りません。

・・・

非中央集権化:NEM vs Ethereum
Bitcoin, NEM, Technology

Ethereum、ブロックチェーンにおける奇跡の子、そしてそのEthereum Virtual Machine(EVM)は、ブロックチェーンの使用例のひとつです。 多くのICOはスマートコントラクトで処理を構築しています。その1つはDAppsまたは分散アプリケーションです。 我々がここで議論するのは:Ethereumは本当に分散されているか? ブロックチェーンアプリケーションを作成する方法が異なるか、「より良い」方法であるのか?です。

Bitcoinの基本的なスクリプト言語を使用すると、ユーザーは自動的にいくつかのタスクを実行するアプリケーションを作成できます。 これらのアプリケーションは主にプライベートサーバー上で実行され、中央化された現存者によって管理されます。 これらは、まったく新しいブロックチェーンのNEMに似ており、Bitcoinよりもはるかに幅広く簡単にアクセスできる機能を備えています。

NEM(ICOを作成するために2番目に普及したプラットフォーム)を攻撃する人々の主な主張は、分散型のスマートコントラクトがないことです。 しかしEthereumは、それが宣伝されているように、実際に分散型プラットフォームと言えるのでしょうか? あなたのプログラムにおいて堅牢で安全な取引をしようとする際に、非中央集権化を視野に入れることに価値があるのでしょうか?

NEMでコントラクトを作成するには、1つまたは複数のAPIリクエストに関連し、それらをオフチェーンアプリケーションでグループ化する必要があります。 技術的には、NEMプラットフォーム上のオープンソースコードが実際に現存するサーバー上で実行されているコードであるかどうかを確認することは困難です。 しかし、それはEthereumのコントラクトよりも分散化されていないということを意味するのでしょうか?

非中央集権化の最初の反論は、Ethereumのソースコードの編集です。 現在、EVMのほとんどのアプリケーションは、少数の暗号におけるコンパイル済みコードで、コンパイルされた堅牢なバイトコードです。 単純なHelloWorldコントラクトの例を見てみましょう。 契約を信頼できるかどうかを確認するたびに、ユーザーはオープンソースコードを使用し、元々使用されていたコンパイラでコンパイルしてから、この操作で取得したバイトコードがアップロードされたバイトコードと等しいかどうかを確認する必要があります。

Bytecode:
“0x6060604052341561000f57600080fd5b6101578061001e6000396000f300606060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063942ae0a714610046575b600080fd5b341561005157600080fd5b6100596100d4565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561009957808201518184015260208101905061007e565b50505050905090810190601f1680156100c65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6100dc610117565b6040805190810160405280600a81526020017f68656c6c6f576f726c6400000000000000000000000000000000000000000000815250905090565b6020604051908101604052806000815250905600a165627a7a72305820e417728d298add6f4e1210005cf05cb6f6f0f2bdfcf162e4e756e53e71d478660029”

(Ethereum Solidityコントラクトと、バイトコードにコンパイルされ、EVMにアップロードする準備ができた同じコントラクト)

しかし、私たちが使用するすべての契約のバイトコードのコンパイルとチェックが最大の問題なのではありません。 現在では、堅牢性の高い契約をより堅牢にし、「アップグレード可能」にするために、堅実な開発者は、契約の所有者がいくつかの変数を変更したり、契約を破棄したり、所有者を変更したりすることができるOwnable.solという特別契約を使用します。 これは契約のために非常に普及しており、Ethereumの主要契約で使用されているため、集中化され、同時により堅牢になります。 契約の所有者は、契約ロジックを変更せずに外部データストレージに書き込むことができます。 また、現代のほとんどの契約は、不変データ記憶装置から更新可能なバージョン管理システムおよび分離論理によってアップグレード可能です。

これらの技術を使用することは、Ethereum VMのためのコードを書く際の良い実践と考えられます。 しかし、より多くの契約集中型でありはするものの、コード上でより安全なスクリプティング言語(歴史のあるBitcoinとこれから登場するNEM)を使用するものと大きく異なるのでしょうか? 最後に・・・現代の堅牢性の高いコントラクトは、タイムスタンプ付きデータをブロックチェーンに格納するという意味でのみ分散化されます。一方、適切に設計されたコントラクトは所有者によって編集可能です。 しかし、それがnon-turing完全なるブロックチェーンと異なるわけではない場合、単にRestfulAPIベースのNEMブロックチェーンを使用するだけで、ブロックチェーンデータにアクセスできるにもかかわらず、別の複雑な言語を学ぶ必要があるのはなぜでしょうか?

参照: GITHUB, NEMPROJECT

・・・
以下原文
・・・

Decentralization: NEM vs Ethereum
Bitcoin, NEM, Technology

Ethereum, miracle child of a blockchain, and its Ethereum Virtual Machine (EVM), is one of the prominent examples of blockchain use. Many ICOs have built their businesses on smart contract, one of which is DApps or decentralized application. Now we discuss: is Ethereum really decentralized? Are there different or “better” ways of writing blockchain applications?

With Bitcoin’s basic scripting language, users are able to create applications that perform some tasks on an automated basis. These applications run mostly on private servers and are managed by centralized entities. These are similar to NEM, a completely new blockchain, written from scratch and with much broader and easier-to-access functions than Bitcoin.

The main ammunition of people attacking NEM (the second most popular platform to create ICO on) is its lack of decentralized smart contracts. But is Ethereum really a decentralized platform as it advertises to be? Will it be worth the use to gain a glimpse of decentralization when trading for the rigidity and security of your application?

To create a contract on NEM, you need to relate to one or more of the API requests and group them in an offchain application. Technically, it is difficult to confirm if an open source code on the NEM platform is really the code that is running on the entity’s server. But does that mean it is less decentralized than Ethereum contracts?

The first counterargument in decentralization’s defense is of the compilation of Ethereum’s source code. Currently, most applications on the EVM is the solidity compiled byte code, with minority of serpent compiled code. Let’s take the example of the simple HelloWorld contract. Every time we want to check if we can trust a contract, we as users should take the open source code, compile it in exact compiler that was originally used, and then check if the bytecode we get from this operation equals the bytecode from the uploaded contract.

Bytecode:
“0x6060604052341561000f57600080fd5b6101578061001e6000396000f300606060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063942ae0a714610046575b600080fd5b341561005157600080fd5b6100596100d4565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561009957808201518184015260208101905061007e565b50505050905090810190601f1680156100c65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6100dc610117565b6040805190810160405280600a81526020017f68656c6c6f576f726c6400000000000000000000000000000000000000000000815250905090565b6020604051908101604052806000815250905600a165627a7a72305820e417728d298add6f4e1210005cf05cb6f6f0f2bdfcf162e4e756e53e71d478660029”

(Ethereum Solidity contract and the same contract compiled to bytecode and ready to upload on EVM)

However, compiling and checking the bytecode of every contract we use isn’t the biggest problem. Currently, to make solidity contracts more robust and “upgradeable,” solidity developers use a special contract called Ownable.sol which allows the owner of the contract to modify some variables, kill the contract, or change the owner. It is very popular for contracts and is used by main contracts on Ethereum, making them centralized and much more robust at the same time. It allows the owner of the contract to write into external data storage without changing the contract logic. Also, most modern contracts are upgradeable through versioning system and/or detaching logic, which can be updateable from immutable data storage.

Using these techniques is considered good practice when writing a solidity code for Ethereum VM. But is it much different from scripting languages (historical Bitcoin and upcoming NEM) that are more contract-centralized but more secure on the code? At the end of the day, modern solidity contracts are decentralized only in the sense of storing timestamped data on the blockchain, while well-architected contracts are editable by owners. But if it isn’t different than non-turing complete blockchains, why learn another complicated language to access the blockchain data when you can simply use RestfulAPI-based NEM blockchain?

Reference: GITHUB, NEMPROJECT