1653381262
誰もがスマートコントラクト、ブロックチェーン、分散型ファイナンス、暗号通貨について話し合っています。ただし、開発者がいなければ、これらは存在しなかったため、ブロックチェーン開発者の需要は急増し続けています。
多くのプログラミング言語では、スマートコントラクトを作成できます。この記事では、使用するトップスマートコントラクトプログラミング言語について説明します。
スマートコントラクトは、仲介者なしで契約の条件に従ってアクションを自動的に実行するコンピュータープログラムです。たとえば、スマートコントラクトメカニズムを使用して土地を購入する場合、土地所有権の書類は支払いが完了した直後に送信されます。支払い後に所有権を譲渡するために、サードパーティのサイトを信頼する必要はありません。
また、トークンを別のトークンと交換できるPancakeSwapなどの分散型エクスチェンジ(DEX)でスマートコントラクトが動作していることを確認できます。BNBをお持ちの場合は、カスタマーサポートに相談することなく簡単にイーサリアムと交換できます。
スマートコントラクトプログラミング言語を使用すると、ブロックチェーンにスマートコントラクトを実装するプログラムを作成できます。
それで、あなたはトップのスマートコントラクト言語は何ですか?入りましょう。
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を使用するブロックチェーンの例には、Tendermint、Binance Smart Chain、Ethereum Classic、Tron、Avalanche、CounterParty、およびHederaが含まれます。
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を使用したスマートコントラクトブロックチェーンには、Solana、Polkadot、NearBlockchainが含まれます。このGitHubリポジトリには、Rustで構築された多くのブロックチェーンプロジェクトがあります。
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を使用していくつかのツールが構築されていますが、タイプチェックが弱いため、ブロックチェーンのコアには対応していません。
Vyperは、イーサリアム仮想マシン(EVM)を対象とする契約指向のPythonのようなプログラミング言語です。リスナーのイベント通知機能、カスタムグローバル変数、グローバル定数など、コントラクト固有の機能があります。
Vyperは、Solidityに存在するセキュリティの問題に対処するために構築されました。Solidityを補完するために開発されたものであり、Solidityに置き換わるものではありません。
Vyperは、Solidityよりも意図的に機能が少なく、契約をより安全で監査しやすくしています。その結果、修飾子、継承、インラインアセンブリ、関数と演算子のオーバーロード、再帰呼び出し、無限長ループ、バイナリ固定をサポートしていません。ポイント。
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))
Yulは、さまざまなバックエンドのニーズに対応するためにバイトコードにコンパイルされる中間プログラミング言語です。Solidityコンパイラには、Yulを中間言語として使用する実験的な実装があります。Yulは、スタンドアロンモードで、Solidity内のインラインアセンブリに使用されます。
Yulは、EVMとewasm(EthereumフレーバーのWebAssembly)の計画的なサポートを担っています。これは、両方のプラットフォームで使用可能な共通の分母になるように設計されています。
Yulは、EVMプラットフォームとewasmプラットフォームの両方に等しく利益をもたらすことができる高レベルの最適化段階の優れたターゲットです。
Yulコードの例を次に示します。
object "SmartContract" {
code {
// Smart contract constructor
datacopy(0, dataoffset("Runtime"), datasize("Runtime"))
return(0, datasize("Runtime"))
}
object "Runtime" {
code {
// Runtime code
}
}
}
ほとんどのイーサリアムベースのプロジェクトは、おそらくすでにYulを使用しています。
上記のリストからどのプログラミング言語を使用するかは、作業するブロックチェーンによって異なります。たとえば、Ethereumブロックチェーンの場合、Solidityはほとんどの開発者にとって最上位の選択肢です。
もちろん、まだ新しい分野であるため、従来の言語サポートとブロックチェーン言語が増えることを期待しています。
ソース:https ://blog.logrocket.com/smart-contract-programming-languages/
#smartcontract #programming #programming
1653381262
誰もがスマートコントラクト、ブロックチェーン、分散型ファイナンス、暗号通貨について話し合っています。ただし、開発者がいなければ、これらは存在しなかったため、ブロックチェーン開発者の需要は急増し続けています。
多くのプログラミング言語では、スマートコントラクトを作成できます。この記事では、使用するトップスマートコントラクトプログラミング言語について説明します。
スマートコントラクトは、仲介者なしで契約の条件に従ってアクションを自動的に実行するコンピュータープログラムです。たとえば、スマートコントラクトメカニズムを使用して土地を購入する場合、土地所有権の書類は支払いが完了した直後に送信されます。支払い後に所有権を譲渡するために、サードパーティのサイトを信頼する必要はありません。
また、トークンを別のトークンと交換できるPancakeSwapなどの分散型エクスチェンジ(DEX)でスマートコントラクトが動作していることを確認できます。BNBをお持ちの場合は、カスタマーサポートに相談することなく簡単にイーサリアムと交換できます。
スマートコントラクトプログラミング言語を使用すると、ブロックチェーンにスマートコントラクトを実装するプログラムを作成できます。
それで、あなたはトップのスマートコントラクト言語は何ですか?入りましょう。
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を使用するブロックチェーンの例には、Tendermint、Binance Smart Chain、Ethereum Classic、Tron、Avalanche、CounterParty、およびHederaが含まれます。
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を使用したスマートコントラクトブロックチェーンには、Solana、Polkadot、NearBlockchainが含まれます。このGitHubリポジトリには、Rustで構築された多くのブロックチェーンプロジェクトがあります。
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を使用していくつかのツールが構築されていますが、タイプチェックが弱いため、ブロックチェーンのコアには対応していません。
Vyperは、イーサリアム仮想マシン(EVM)を対象とする契約指向のPythonのようなプログラミング言語です。リスナーのイベント通知機能、カスタムグローバル変数、グローバル定数など、コントラクト固有の機能があります。
Vyperは、Solidityに存在するセキュリティの問題に対処するために構築されました。Solidityを補完するために開発されたものであり、Solidityに置き換わるものではありません。
Vyperは、Solidityよりも意図的に機能が少なく、契約をより安全で監査しやすくしています。その結果、修飾子、継承、インラインアセンブリ、関数と演算子のオーバーロード、再帰呼び出し、無限長ループ、バイナリ固定をサポートしていません。ポイント。
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))
Yulは、さまざまなバックエンドのニーズに対応するためにバイトコードにコンパイルされる中間プログラミング言語です。Solidityコンパイラには、Yulを中間言語として使用する実験的な実装があります。Yulは、スタンドアロンモードで、Solidity内のインラインアセンブリに使用されます。
Yulは、EVMとewasm(EthereumフレーバーのWebAssembly)の計画的なサポートを担っています。これは、両方のプラットフォームで使用可能な共通の分母になるように設計されています。
Yulは、EVMプラットフォームとewasmプラットフォームの両方に等しく利益をもたらすことができる高レベルの最適化段階の優れたターゲットです。
Yulコードの例を次に示します。
object "SmartContract" {
code {
// Smart contract constructor
datacopy(0, dataoffset("Runtime"), datasize("Runtime"))
return(0, datasize("Runtime"))
}
object "Runtime" {
code {
// Runtime code
}
}
}
ほとんどのイーサリアムベースのプロジェクトは、おそらくすでにYulを使用しています。
上記のリストからどのプログラミング言語を使用するかは、作業するブロックチェーンによって異なります。たとえば、Ethereumブロックチェーンの場合、Solidityはほとんどの開発者にとって最上位の選択肢です。
もちろん、まだ新しい分野であるため、従来の言語サポートとブロックチェーン言語が増えることを期待しています。
ソース:https ://blog.logrocket.com/smart-contract-programming-languages/