Upgrade to Pro — share decks privately, control downloads, hide ads and more …

create-my-own-smart-contract-languages-using-llvm-1

akht
November 18, 2021
190

 create-my-own-smart-contract-languages-using-llvm-1

akht

November 18, 2021
Tweet

Transcript

  1. やりたいこと - EVM(Ethereum Virtual Machine)で動くスマートコントラクト記述言語 を自作したい - e.g. Solidity, Vyper

    - 自作言語で書いたスマートコントラクトがブロックチェーン(Ethereum)上 でずっと動いている...ってなんかイイ - Ethereumに興味があるのでEVMのことを知りたい
  2. どうやって作る...? - Lexer, Parser, Code Generatorなどを用意して - 独自言語 -> EVMアセンブリ

    -> EVMバイナリ -> EVMバイトコード に変換する - 最終的にEVMバイトコードを吐ければいい - いきなり全部やるのは大変そう(最終的にはやりたいけど) - まずはさっと試せる何かがないものか... => ありました
  3. $ build/bin/llc -print-after-all -debug -mtriple=evm -fletype=asm toy.ll $ build/bin/llc -print-after-all

    -debug -mtriple=evm -fletype=obj toy.ll LLVM IR -> EVMアセンブリ LLVM IR -> EVMバイナリ
  4. ❯ evm --input 0000000000000000000000000000000000000000000000000000000000 0000110000000000000000000000000000000000000000000000000000 000000000019 --code 5b60806040526020803560008035610045808483600051806060015260 0051608001806000526020526004580192565b60005160209003516000 52915092509150908152f35b019056

    run 0x00000000000000000000000000000000000000000000000000000000 0000002a EVMバイトコードを実際に EVMで動かしてみる 0000000000000000000000000000000000000000000000000000000000000011 => 17 0000000000000000000000000000000000000000000000000000000000000019 => 25 0x000000000000000000000000000000000000000000000000000000000000002a => 42 def hoge(a b) a + b; が元のコードなので ちゃんと動いていそう!すごい!!
  5. これから - EVM LLVMを使いつつブロックチェーン独自の操作を実装する - アドレスに関する操作(balance, transferなど) - EVM LLVMからの脱却

    - EVMについて知りたいというのがきっかけだったので EVM LLVMに頼りぱなしだとあまり意味がない... - 次回のK-Rubyで進捗をお話しできれば!