Blockchain code Metaverse VR

Crypto×VR×SmartContract(384)

スポンサーリンク

//tips

//smart contract

Udemyで最適な環境構築部分を知りたかったのだが、基礎部分もがっつりあるので先にそちらも確認していく。

自分のlaptopにてコンパイルしたcontract sourceをrinkebyなどのネットワークdeployするとcontract instanceとしてオブジェクトとして生成される。

この流れはクラスを自身で作成し、そのインスタンスを生成している流れと似ている。

Solidityで書かれたものがcontract difinition、そこからコンパイルすると、2つのアウトプットが得られ、それが以前触れたbytecodeとABIになる。bytecodeが実際のcontractの内容とABIがインターフェースで機械語であるbytecodeを我々がみて、気づきを得やすくするもの。

Remixで下記を記載。

pragma solidity ^0.4.17;

contract Inbox{
//インスタンスの中身
//このstorage変数はブロックチェーン上に保存される
string public message;

//contract名と同じfunctionはコンストラクターとしてcontract生成時
//自動的に必ず一回呼ばれるもの
function Inbox(string initialMessage)public{
message= initialMessage;
}

function setMessage(string newMessage)public{
message=newMessage;
}

function getMessage()public view returns(string){
//アクセスして値を返しているだけなのでview
return message;
}
}

これはremixでcontract sourceを作り、bytecodeにコンパイルし、deployするとブラウザのfake network(javascript VM)にインスタンスとして生成される。

そしてdeploy後にinitialMessageを入力すると、その後に、インスタンスが生成され、setmessage,getmessageが使えるようになる。

これはcontractのstarageに格納されている変数messageをcontract内の関数で処理していることを意味する。

また、getMessage()をコードベースで削除してもデプロイされたインスタンスの機能には影響しないので再デプロイしてインスタンスを生成し直す必要がある。

デプロイ時にtoが無い場合にのみcontractが生成されることになる。そして、何かブロックチェーン上での変更がある場合は、それはtranactionという形を通して実行されることになる。

string public message;がデプロイされ、messageをブロックチェーン上で見る場合にはcallされ、それはtransactionを実行するものではないため、コストも必要なく、即座に結果が返される。

一方で setMessageはトランザクションであり、ブロックチェーン上の値を変更するため、callではなくなり、コストもかかるtransactionを使うことになる。同時に、transactionコードも取得できる。

gas priceは最小単位であるweiで表され、senderがtransaction処理を依頼するためにかかるコスト。pay per unitで換算されるため、gas priceを10でオファーすることの意味は、3wei使用する足し算を3*10=30weiのコストとして負担するということ。

Gaslimitはこのtransactionで消費するガスの許容できる最大gas数を示す。ループ処理が延々に終わらないなどが起こってしまうと膨大なコストがかかることになるので、それへの対策となる。

例えばgaslimit10に設定し、doMathfunction内で下記を順に実行していくとすると、

Add:cost3
Substract:cost3
Multipply:cost5

足し算と引き算の部分は実行されるが、10を超えるタイミングとなる掛け算は実行されないことになる。

Gaslimit20とすれば通るので、gasprice300でtotalcostを見てみると

300*wei/gas*11gas=3300weiがtotalのgasコストとなる。

ここからremixではなくエディターを使用しての作成を行っていく。

早速vscodeに移すも下記のエラー。このエラーをどうにか解決する方法を見つけなければならないよう。npm installまたはnpm initが問題か。

Source file requires different compiler version (current compiler is 0.8.10+commit.fc410830.Emscripten.clang)

また、Constructorを呼ぶ場合やmemoryを呼ぶ場合についても確認する必要がある。

人気の記事

1

コロナによる需要変化 コロナパンデミックの影響で、人々は外に出られなくなり、自宅で過ごす時間が増えました。 この自粛ムードの中、下記のようなビジネスの需要変化が引き起こされています。 【利用者減少】 ...

2

米国レストランの決済時に毎日お世話になっていた「Square」のビジネスモデルについて本日はふれていきたいと思います。 「Square」とは、ネットにつながったモバイル端末と専用のカードリーダーを用意 ...

3

無料でネットショップを開けるアプリとして多くの人に驚きを与えたBASE株式会社が、2019年10月25日東証マザーズに上場しました。2020年2月時点で90万店を超えるショップを抱えるまでに成長してい ...

4

2011年にサービスを開始してから圧倒的な成長率を誇るインテリア通販サイト 【FLYMEe/フライミー】を皆さんご存じでしょうか。 「自分のイメージするインテリア、本当に欲しいインテリアがどこにあるの ...

5

ナイキのSNKRSが、なぜこれほどまでに人気なのか?調べてみました。 きっかけは米国での友達との会話。彼は自分のシューズをみせて、「これ20万円もしたんだぜ。」と語ってくれました。 あまり靴に興味がな ...

-Blockchain, code, Metaverse, VR
-, ,

Copyright© BUSINESS HACKER , 2021 All Rights Reserved Powered by AFFINGER5.