藤本  結衣

藤本 結衣

1653381262

ブロックチェーンのトップ5スマートコントラクトプログラミング言語

誰もがスマートコントラクト、ブロックチェーン、分散型ファイナンス、暗号通貨について話し合っています。ただし、開発者がいなければ、これらは存在しなかったため、ブロックチェーン開発者の需要は急増し続けています。

多くのプログラミング言語では、スマートコントラクトを作成できます。この記事では、使用するトップスマートコントラクトプログラミング言語について説明します。

スマートコントラクトとは何ですか?

スマートコントラクトは、仲介者なしで契約の条件に従ってアクションを自動的に実行するコンピュータープログラムです。たとえば、スマートコントラクトメカニズムを使用して土地を購入する場合、土地所有権の書類は支払いが完了した直後に送信されます。支払い後に所有権を譲渡するために、サードパーティのサイトを信頼する必要はありません。

また、トークンを別のトークンと交換できるPancakeSwapなどの分散型エクスチェンジ(DEX)でスマートコントラクトが動作していることを確認できます。BNBをお持ちの場合は、カスタマーサポートに相談することなく簡単にイーサリアムと交換できます。

スマートコントラクトプログラミング言語を使用すると、ブロックチェーンにスマートコントラクトを実装するプログラムを作成できます。

それで、あなたはトップのスマートコントラクト言語は何ですか?入りましょう。

1.堅牢性

Solidityは、開発者がスマートコントラクトを作成できるように設計された、オブジェクト指向で静的に型付けされたプログラミング言語です。

Solidityは、 C ++Python 、JavaScriptなどの既存のプログラミング言語に基づいて設計されているため、これらの言語に見られる同様の言語構造を使用しており、開発者が簡単に採用できる可能性があります。

Solidityとのスマートコントラクトの例を次に示します。

pragma solidity ^0.8.7;

contract MyContract {

    constructor() public{

        value = "My value";
    }

    string public value;

    function get() public view returns (string memory){
        return value;
    }

    function set(string memory _value) public{
        value = _value;
    }
} 

JavaScriptまたはC++の開発者であれば、これはおなじみのように見えます。

 

Solidityは、最初のスマートコントラクトプログラミング言語であり、市場で広く採用されており、多くの分散型アプリケーションの構築に使用されています。イーサリアムでスマートコントラクトを作成するために開発されました。JavaやJava仮想マシン(JVM)と同様に、Solidityはイーサリアム仮想マシン(EVM)で実行されます。

Solidityでスマートコントラクトをプログラミングする利点

  • Solidityには、アクセス可能な大規模なコミュニティがあります。Solidityは最初のスマートコントラクトプログラミング言語であり、Ethereumネットワークでのスマートコントラクトプログラミング専用に開発されたため、幅広いコミュニティのサポートを得て、新しい開発者が行き詰まったときに簡単に助けを得ることができます。
  • Solidityはチューリング完全であるため、ほんの一握りのアルゴリズムを実行するだけでなく、すべての計算可能な関数を計算するために使用できます。
  • Solidityは、最新のプログラミング言語のほとんどで利用できる概念を提供します。関数、文字列操作、クラス、変数、算術演算などがあります。さらに、Solidityは、ハッシュテーブルとして機能し、キータイプとキー値のペアで構成されるマッピングデータ構造をサポートします。
  • Python、C ++、JavaScriptなどの一般的なプログラミング言語でプログラミングする方法をすでに知っている場合、Solidityの構文のほとんどはこれらの言語から借用されているため、Solidityの学習曲線は急ではありません。

堅実なスマートコントラクトのプログラミングのデメリット

  • Solidityは新しい言語であり、コミュニティがライブラリ開発とそのツールを支援してきましたが、その言語で行うべきことはまだたくさんあるので、完全に自分で実装する必要があります。

Solidityを使用するブロックチェーンの例には、TendermintBinance Smart ChainEthereum ClassicTronAvalancheCounterParty、およびHederaが含まれます。

2.さび

Stack Overflowの調査によると、Rustは5年連続で最も愛されているプログラミング言語の1つです。

Rustは、高速でメモリ効率の高い低レベルの静的型付けプログラミング言語です。スケーラビリティが交渉できない業界では、言語としてのRustが家を見つけます。Rustは、シンプルさ、メモリ効率、信頼性、複雑さを兼ね備えた、非常に強力な比較的新しいプログラミング言語です。

デフォルトでは、Rustは最良の設計および開発プラクティスを想定しており、必要に応じてそれらを変更する機会も提供します。Rustにはガベージコレクターがありません。つまり、実行時に(言語によって引き起こされる)予期しないインシデントが発生することはありません。

これらすべての要因により、Rustはブロックチェーンのプログラミングに最適です。最速のブロックチェーンの1つであるSolanaが、Rustをコアとして構築されているのは当然のことです。

Rustのコンパイラには、色分けされた出力と、デバッグに役立つさらに詳細なエラー出力があります。

多くの場合、Rustは、説明とともに関連するコードを強調表示することにより、エラーの原因とその場所を示します。また、場合によっては、エラーの修正を提供します。

Rustを使用したスマートコントラクトの例を次に示します。

use borsh::{BorshDeserialize, BorshSerialize};
use near_sdk::{env, near_bindgen};
use near_sdk::collections::UnorderedMap;

#[global_allocator]
static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT;
pub struct StatusMessage {
    records: UnorderedMap<String, String>,
}
#[near_bindgen]
impl StatusMessage {
    pub fn set_status(&mut self, message: String) {
        let account_id = env::signer_account_id();
        self.records.insert(&account_id, &message);
    }
    pub fn get_status(&self, account_id: String) -> Option<String> {
        return self.records.get(&account_id);
    }
}

Rustには、オブジェクト指向の機能がいくつか含まれています。構造体とデータを作成できます。ただし、他のオブジェクト指向言語とは異なり、継承はありません。

Rustを使用したスマートコントラクトブロックチェーンには、SolanaPolkadotNearBlockchainが含まれます。このGitHubリポジトリには、Rustで構築された多くのブロックチェーンプロジェクトがあります。

Rustとスマートコントラクトをプログラミングする利点

  • Rustは低レベルのプログラミング言語であり、効率を高めるように設計されているため、高スループットで分散型アプリケーションを構築できます。
  • さびの不変性により、予測可能なプログラムを作成できます。これは、ブロックチェーン上に構築されたアプリケーションのタイプに必要なものです。

Rustとのスマートコントラクトのプログラミングのデメリット

  • Rustは、いくつかの新しい概念を備えた新しいプログラミング言語です。特にプログラミングに不慣れな場合は、操作に慣れるまでに時間がかかることがあります。
  • PythonやJavaScriptなどの他の言語と比較して、ほとんどすべてのライブラリが限られています
  • それは冗長です。Rustを使用すると、すべてのプログラム構成を明示的に記述する必要があります。つまり、JavaScriptやPythonなどの言語よりも多くのコードを記述します。

3. JavaScript

JavaScriptは汎用プログラミング言語であり、ブロックチェーン空間で使用されています。JavaScriptはエントリーレベルの言語であるため、ほとんどのブロックチェーンはJavaScriptラッパーまたはライブラリを作成して、開発者が簡単にエコシステムに飛び込み、できるだけ早くすばらしい製品の構築を開始できるようにする傾向があります。

Hyperledger Fabricは、JavaScript(Node.js)を含むいくつかのプログラミング言語でスマートコントラクトを構築できるようにするブロックチェーンです。

HyperLedgerファブリックでのスマートコントラクトの例を次に示します。

'use strict';

const { Contract } = require('fabric-contract-api');
const util = require('util');

/**
 * A program to support updating values in a smart contract
 */
class UpdateSmartContractValue extends Contract

    constructor(){
        super('UpdateSmartContractValue');
    }

    async transactionA(ctx, newValue) {
        let oldValue = await ctx.stub.getState(key);
        await ctx.stub.putState(key, Buffer.from(newValue));
        return Buffer.from(newValue.toString());
    }

    async transactionB(ctx) {
      //  .....
    }

};

module.exports = UpdateSmartContractValue

コミュニティはweb3.jsを構築しました。これは、HTTP、WebSocket、またはIPCを使用してEthereumスマートコントラクトと対話できるようにするライブラリのコレクションです。

Solana Foundationは 、JavaScript開発者ができるだけ早くブロックチェーン上でDappsの構築を開始できるようにする、SolanaRustプログラムの周りにJavaScriptラッパーも構築しました。

ブロックチェーンの開発を支援するためにJavaScriptを使用していくつかのツールが構築されていますが、タイプチェックが弱いため、ブロックチェーンのコアには対応していません。

JavaScriptを使用してスマートコントラクトをプログラミングする利点

  • コミュニティのサポートが豊富な、人気のある成熟したプログラミング言語です。
  • 他の言語、特に新しい言語と比較して、開発時間が短縮されます。

JavaScriptを使用してスマートコントラクトをプログラミングすることのデメリット

  • 動的型付け:スマートコントラクトのようなミッションクリティカルなアプリケーションでは、型の安全性が重要な機能です。ほとんどの開発者がブロックチェーン上に構築されたアプリケーションに静的に型付けされた言語を使用することを好む場合、JavaScriptは動的な型安全性を実装します

4.バイパー

Vyperは、イーサリアム仮想マシン(EVM)を対象とする契約指向のPythonのようなプログラミング言語です。リスナーのイベント通知機能、カスタムグローバル変数、グローバル定数など、コントラクト固有の機能があります。

Vyperは、Solidityに存在するセキュリティの問題に対処するために構築されました。Solidityを補完するために開発されたものであり、Solidityに置き換わるものではありません。

Vyperは、Solidityよりも意図的に機能が少なく、契約をより安全で監査しやすくしています。その結果、修飾子、継承、インラインアセンブリ、関数と演算子のオーバーロード、再帰呼び出し、無限長ループ、バイナリ固定をサポートしていません。ポイント。

利点

  • Vyperは攻撃を受けにくいため、安全でスマートな契約を構築することは可能であり、自然なことです。
  • Vyperコードは人間が読める形式です。Vyperの場合、ライターのシンプルさよりもリーダーのシンプルさが重要です。
  • Vyperの顕著な特徴は、特定のVyper関数呼び出しに関連するガス消費量の正確な上限を計算する機能です。

短所

  • Vyperは純粋関数のサポートが制限されているため、マークされconstantたものは状態を変更できません

Pythonコードを見たり操作したりしたことがあれば、ほとんどVyperコードを書くことができます。

これは、ドキュメントの例です。これは、その感触を示すためのものです。

class VyperContract:
    """
    An alternative Contract Factory which invokes all methods as `call()`,
    unless you add a keyword argument. The keyword argument assigns the prep method.
    This call
    > contract.withdraw(amount, transact={'from': eth.accounts[1], 'gas': 100000, ...})
    is equivalent to this call in the classic contract:
    > contract.functions.withdraw(amount).transact({'from': eth.accounts[1], 'gas': 100000, ...})
    """

    def __init__(self, classic_contract, method_class=VyperMethod):
        classic_contract._return_data_normalizers += CONCISE_NORMALIZERS
        self._classic_contract = classic_contract
        self.address = self._classic_contract.address
        protected_fn_names = [fn for fn in dir(self) if not fn.endswith('__')]
        for fn_name in self._classic_contract.functions:
            # Override namespace collisions
            if fn_name in protected_fn_names:
                _concise_method = mk_collision_prop(fn_name)
            else:
                _classic_method = getattr(
                    self._classic_contract.functions,
                    fn_name)
                _concise_method = method_class(
                    _classic_method,
                    self._classic_contract._return_data_normalizers
                )
            setattr(self, fn_name, _concise_method)

    @classmethod
    def factory(cls, *args, **kwargs):
        return compose(cls, Contract.factory(*args, **kwargs))

5.ユル

Yulは、さまざまなバックエンドのニーズに対応するためにバイトコードにコンパイルされる中間プログラミング言語です。Solidityコンパイラには、Yulを中間言語として使用する実験的な実装があります。Yulは、スタンドアロンモードで、Solidity内のインラインアセンブリに使用されます。

Yulは、EVMとewasm(EthereumフレーバーのWebAssembly)の計画的なサポートを担っています。これは、両方のプラットフォームで使用可能な共通の分母になるように設計されています。

Yulは、EVMプラットフォームとewasmプラットフォームの両方に等しく利益をもたらすことができる高レベルの最適化段階の優れたターゲットです。

ユルを使用する利点

  • 読みやすさ:Yulで記述されたプログラムは、コードがSolidityのコンパイラーによって生成された場合でも読み取り可能です。Yulは、ループ、関数呼び出し、ifおよびswitchステートメントなどの高レベルの構造を提供します
  • Yulコードからバイトコードへのコード変換のおかげで、Yulは簡単に使用できます
  • ユルはシンプルで柔軟な言語を使用して契約を作成し、初心者に優しいです
  • Yulは、値や参照などの概念の混乱を避けるために静的に型付けされています。常に省略できるデフォルトのタイプがあります

Yulコードの例を次に示します。

object "SmartContract" {
  code {
    // Smart contract constructor
    datacopy(0, dataoffset("Runtime"), datasize("Runtime"))
    return(0, datasize("Runtime"))
  }
  object "Runtime" {
    code {
       // Runtime code
    }
  }
}

ほとんどのイーサリアムベースのプロジェクトは、おそらくすでにYulを使用しています。

ユルを使用するデメリット

  • Yulはバイトコードにコンパイルする必要があるため、コンパイルプロセス全体を完了するために追加の時間が必要になり、開発中に時間がかかります。

結論

上記のリストからどのプログラミング言語を使用するかは、作業するブロックチェーンによって異なります。たとえば、Ethereumブロックチェーンの場合、Solidityはほとんどの開発者にとって最上位の選択肢です。

もちろん、まだ新しい分野であるため、従来の言語サポートとブロックチェーン言語が増えることを期待しています。

 ソース:https ://blog.logrocket.com/smart-contract-programming-languages/ 

 #smartcontract #programming #programming 

What is GEEK

Buddha Community

ブロックチェーンのトップ5スマートコントラクトプログラミング言語
藤本  結衣

藤本 結衣

1653381262

ブロックチェーンのトップ5スマートコントラクトプログラミング言語

誰もがスマートコントラクト、ブロックチェーン、分散型ファイナンス、暗号通貨について話し合っています。ただし、開発者がいなければ、これらは存在しなかったため、ブロックチェーン開発者の需要は急増し続けています。

多くのプログラミング言語では、スマートコントラクトを作成できます。この記事では、使用するトップスマートコントラクトプログラミング言語について説明します。

スマートコントラクトとは何ですか?

スマートコントラクトは、仲介者なしで契約の条件に従ってアクションを自動的に実行するコンピュータープログラムです。たとえば、スマートコントラクトメカニズムを使用して土地を購入する場合、土地所有権の書類は支払いが完了した直後に送信されます。支払い後に所有権を譲渡するために、サードパーティのサイトを信頼する必要はありません。

また、トークンを別のトークンと交換できるPancakeSwapなどの分散型エクスチェンジ(DEX)でスマートコントラクトが動作していることを確認できます。BNBをお持ちの場合は、カスタマーサポートに相談することなく簡単にイーサリアムと交換できます。

スマートコントラクトプログラミング言語を使用すると、ブロックチェーンにスマートコントラクトを実装するプログラムを作成できます。

それで、あなたはトップのスマートコントラクト言語は何ですか?入りましょう。

1.堅牢性

Solidityは、開発者がスマートコントラクトを作成できるように設計された、オブジェクト指向で静的に型付けされたプログラミング言語です。

Solidityは、 C ++Python 、JavaScriptなどの既存のプログラミング言語に基づいて設計されているため、これらの言語に見られる同様の言語構造を使用しており、開発者が簡単に採用できる可能性があります。

Solidityとのスマートコントラクトの例を次に示します。

pragma solidity ^0.8.7;

contract MyContract {

    constructor() public{

        value = "My value";
    }

    string public value;

    function get() public view returns (string memory){
        return value;
    }

    function set(string memory _value) public{
        value = _value;
    }
} 

JavaScriptまたはC++の開発者であれば、これはおなじみのように見えます。

 

Solidityは、最初のスマートコントラクトプログラミング言語であり、市場で広く採用されており、多くの分散型アプリケーションの構築に使用されています。イーサリアムでスマートコントラクトを作成するために開発されました。JavaやJava仮想マシン(JVM)と同様に、Solidityはイーサリアム仮想マシン(EVM)で実行されます。

Solidityでスマートコントラクトをプログラミングする利点

  • Solidityには、アクセス可能な大規模なコミュニティがあります。Solidityは最初のスマートコントラクトプログラミング言語であり、Ethereumネットワークでのスマートコントラクトプログラミング専用に開発されたため、幅広いコミュニティのサポートを得て、新しい開発者が行き詰まったときに簡単に助けを得ることができます。
  • Solidityはチューリング完全であるため、ほんの一握りのアルゴリズムを実行するだけでなく、すべての計算可能な関数を計算するために使用できます。
  • Solidityは、最新のプログラミング言語のほとんどで利用できる概念を提供します。関数、文字列操作、クラス、変数、算術演算などがあります。さらに、Solidityは、ハッシュテーブルとして機能し、キータイプとキー値のペアで構成されるマッピングデータ構造をサポートします。
  • Python、C ++、JavaScriptなどの一般的なプログラミング言語でプログラミングする方法をすでに知っている場合、Solidityの構文のほとんどはこれらの言語から借用されているため、Solidityの学習曲線は急ではありません。

堅実なスマートコントラクトのプログラミングのデメリット

  • Solidityは新しい言語であり、コミュニティがライブラリ開発とそのツールを支援してきましたが、その言語で行うべきことはまだたくさんあるので、完全に自分で実装する必要があります。

Solidityを使用するブロックチェーンの例には、TendermintBinance Smart ChainEthereum ClassicTronAvalancheCounterParty、およびHederaが含まれます。

2.さび

Stack Overflowの調査によると、Rustは5年連続で最も愛されているプログラミング言語の1つです。

Rustは、高速でメモリ効率の高い低レベルの静的型付けプログラミング言語です。スケーラビリティが交渉できない業界では、言語としてのRustが家を見つけます。Rustは、シンプルさ、メモリ効率、信頼性、複雑さを兼ね備えた、非常に強力な比較的新しいプログラミング言語です。

デフォルトでは、Rustは最良の設計および開発プラクティスを想定しており、必要に応じてそれらを変更する機会も提供します。Rustにはガベージコレクターがありません。つまり、実行時に(言語によって引き起こされる)予期しないインシデントが発生することはありません。

これらすべての要因により、Rustはブロックチェーンのプログラミングに最適です。最速のブロックチェーンの1つであるSolanaが、Rustをコアとして構築されているのは当然のことです。

Rustのコンパイラには、色分けされた出力と、デバッグに役立つさらに詳細なエラー出力があります。

多くの場合、Rustは、説明とともに関連するコードを強調表示することにより、エラーの原因とその場所を示します。また、場合によっては、エラーの修正を提供します。

Rustを使用したスマートコントラクトの例を次に示します。

use borsh::{BorshDeserialize, BorshSerialize};
use near_sdk::{env, near_bindgen};
use near_sdk::collections::UnorderedMap;

#[global_allocator]
static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT;
pub struct StatusMessage {
    records: UnorderedMap<String, String>,
}
#[near_bindgen]
impl StatusMessage {
    pub fn set_status(&mut self, message: String) {
        let account_id = env::signer_account_id();
        self.records.insert(&account_id, &message);
    }
    pub fn get_status(&self, account_id: String) -> Option<String> {
        return self.records.get(&account_id);
    }
}

Rustには、オブジェクト指向の機能がいくつか含まれています。構造体とデータを作成できます。ただし、他のオブジェクト指向言語とは異なり、継承はありません。

Rustを使用したスマートコントラクトブロックチェーンには、SolanaPolkadotNearBlockchainが含まれます。このGitHubリポジトリには、Rustで構築された多くのブロックチェーンプロジェクトがあります。

Rustとスマートコントラクトをプログラミングする利点

  • Rustは低レベルのプログラミング言語であり、効率を高めるように設計されているため、高スループットで分散型アプリケーションを構築できます。
  • さびの不変性により、予測可能なプログラムを作成できます。これは、ブロックチェーン上に構築されたアプリケーションのタイプに必要なものです。

Rustとのスマートコントラクトのプログラミングのデメリット

  • Rustは、いくつかの新しい概念を備えた新しいプログラミング言語です。特にプログラミングに不慣れな場合は、操作に慣れるまでに時間がかかることがあります。
  • PythonやJavaScriptなどの他の言語と比較して、ほとんどすべてのライブラリが限られています
  • それは冗長です。Rustを使用すると、すべてのプログラム構成を明示的に記述する必要があります。つまり、JavaScriptやPythonなどの言語よりも多くのコードを記述します。

3. JavaScript

JavaScriptは汎用プログラミング言語であり、ブロックチェーン空間で使用されています。JavaScriptはエントリーレベルの言語であるため、ほとんどのブロックチェーンはJavaScriptラッパーまたはライブラリを作成して、開発者が簡単にエコシステムに飛び込み、できるだけ早くすばらしい製品の構築を開始できるようにする傾向があります。

Hyperledger Fabricは、JavaScript(Node.js)を含むいくつかのプログラミング言語でスマートコントラクトを構築できるようにするブロックチェーンです。

HyperLedgerファブリックでのスマートコントラクトの例を次に示します。

'use strict';

const { Contract } = require('fabric-contract-api');
const util = require('util');

/**
 * A program to support updating values in a smart contract
 */
class UpdateSmartContractValue extends Contract

    constructor(){
        super('UpdateSmartContractValue');
    }

    async transactionA(ctx, newValue) {
        let oldValue = await ctx.stub.getState(key);
        await ctx.stub.putState(key, Buffer.from(newValue));
        return Buffer.from(newValue.toString());
    }

    async transactionB(ctx) {
      //  .....
    }

};

module.exports = UpdateSmartContractValue

コミュニティはweb3.jsを構築しました。これは、HTTP、WebSocket、またはIPCを使用してEthereumスマートコントラクトと対話できるようにするライブラリのコレクションです。

Solana Foundationは 、JavaScript開発者ができるだけ早くブロックチェーン上でDappsの構築を開始できるようにする、SolanaRustプログラムの周りにJavaScriptラッパーも構築しました。

ブロックチェーンの開発を支援するためにJavaScriptを使用していくつかのツールが構築されていますが、タイプチェックが弱いため、ブロックチェーンのコアには対応していません。

JavaScriptを使用してスマートコントラクトをプログラミングする利点

  • コミュニティのサポートが豊富な、人気のある成熟したプログラミング言語です。
  • 他の言語、特に新しい言語と比較して、開発時間が短縮されます。

JavaScriptを使用してスマートコントラクトをプログラミングすることのデメリット

  • 動的型付け:スマートコントラクトのようなミッションクリティカルなアプリケーションでは、型の安全性が重要な機能です。ほとんどの開発者がブロックチェーン上に構築されたアプリケーションに静的に型付けされた言語を使用することを好む場合、JavaScriptは動的な型安全性を実装します

4.バイパー

Vyperは、イーサリアム仮想マシン(EVM)を対象とする契約指向のPythonのようなプログラミング言語です。リスナーのイベント通知機能、カスタムグローバル変数、グローバル定数など、コントラクト固有の機能があります。

Vyperは、Solidityに存在するセキュリティの問題に対処するために構築されました。Solidityを補完するために開発されたものであり、Solidityに置き換わるものではありません。

Vyperは、Solidityよりも意図的に機能が少なく、契約をより安全で監査しやすくしています。その結果、修飾子、継承、インラインアセンブリ、関数と演算子のオーバーロード、再帰呼び出し、無限長ループ、バイナリ固定をサポートしていません。ポイント。

利点

  • Vyperは攻撃を受けにくいため、安全でスマートな契約を構築することは可能であり、自然なことです。
  • Vyperコードは人間が読める形式です。Vyperの場合、ライターのシンプルさよりもリーダーのシンプルさが重要です。
  • Vyperの顕著な特徴は、特定のVyper関数呼び出しに関連するガス消費量の正確な上限を計算する機能です。

短所

  • Vyperは純粋関数のサポートが制限されているため、マークされconstantたものは状態を変更できません

Pythonコードを見たり操作したりしたことがあれば、ほとんどVyperコードを書くことができます。

これは、ドキュメントの例です。これは、その感触を示すためのものです。

class VyperContract:
    """
    An alternative Contract Factory which invokes all methods as `call()`,
    unless you add a keyword argument. The keyword argument assigns the prep method.
    This call
    > contract.withdraw(amount, transact={'from': eth.accounts[1], 'gas': 100000, ...})
    is equivalent to this call in the classic contract:
    > contract.functions.withdraw(amount).transact({'from': eth.accounts[1], 'gas': 100000, ...})
    """

    def __init__(self, classic_contract, method_class=VyperMethod):
        classic_contract._return_data_normalizers += CONCISE_NORMALIZERS
        self._classic_contract = classic_contract
        self.address = self._classic_contract.address
        protected_fn_names = [fn for fn in dir(self) if not fn.endswith('__')]
        for fn_name in self._classic_contract.functions:
            # Override namespace collisions
            if fn_name in protected_fn_names:
                _concise_method = mk_collision_prop(fn_name)
            else:
                _classic_method = getattr(
                    self._classic_contract.functions,
                    fn_name)
                _concise_method = method_class(
                    _classic_method,
                    self._classic_contract._return_data_normalizers
                )
            setattr(self, fn_name, _concise_method)

    @classmethod
    def factory(cls, *args, **kwargs):
        return compose(cls, Contract.factory(*args, **kwargs))

5.ユル

Yulは、さまざまなバックエンドのニーズに対応するためにバイトコードにコンパイルされる中間プログラミング言語です。Solidityコンパイラには、Yulを中間言語として使用する実験的な実装があります。Yulは、スタンドアロンモードで、Solidity内のインラインアセンブリに使用されます。

Yulは、EVMとewasm(EthereumフレーバーのWebAssembly)の計画的なサポートを担っています。これは、両方のプラットフォームで使用可能な共通の分母になるように設計されています。

Yulは、EVMプラットフォームとewasmプラットフォームの両方に等しく利益をもたらすことができる高レベルの最適化段階の優れたターゲットです。

ユルを使用する利点

  • 読みやすさ:Yulで記述されたプログラムは、コードがSolidityのコンパイラーによって生成された場合でも読み取り可能です。Yulは、ループ、関数呼び出し、ifおよびswitchステートメントなどの高レベルの構造を提供します
  • Yulコードからバイトコードへのコード変換のおかげで、Yulは簡単に使用できます
  • ユルはシンプルで柔軟な言語を使用して契約を作成し、初心者に優しいです
  • Yulは、値や参照などの概念の混乱を避けるために静的に型付けされています。常に省略できるデフォルトのタイプがあります

Yulコードの例を次に示します。

object "SmartContract" {
  code {
    // Smart contract constructor
    datacopy(0, dataoffset("Runtime"), datasize("Runtime"))
    return(0, datasize("Runtime"))
  }
  object "Runtime" {
    code {
       // Runtime code
    }
  }
}

ほとんどのイーサリアムベースのプロジェクトは、おそらくすでにYulを使用しています。

ユルを使用するデメリット

  • Yulはバイトコードにコンパイルする必要があるため、コンパイルプロセス全体を完了するために追加の時間が必要になり、開発中に時間がかかります。

結論

上記のリストからどのプログラミング言語を使用するかは、作業するブロックチェーンによって異なります。たとえば、Ethereumブロックチェーンの場合、Solidityはほとんどの開発者にとって最上位の選択肢です。

もちろん、まだ新しい分野であるため、従来の言語サポートとブロックチェーン言語が増えることを期待しています。

 ソース:https ://blog.logrocket.com/smart-contract-programming-languages/ 

 #smartcontract #programming #programming