Giter VIP home page Giter VIP logo

gialog's Issues

0805 _ ERC721PresetMinterPauserAutoId

ERC721に準拠したシンプルなNFTを実装する際,OpenZeppelin を利用するのがデファクトスタンダード.
OpenZeppelin は Presets というコントラクトテンプレートを提供してくれているので,開発が楽に済む上に脆弱性の観点からも安心できる.

ERC721に準拠したOpenZeppelin の Presets が ERC721PresetMinterPauserAutoId である.

Docs: Presets - OpenZeppelin Docs

source code: openzeppelin-contracts/ERC721PresetMinterPauserAutoId.sol at master · OpenZeppelin/openzeppelin-contracts

ERC721PresetMinterPauserAutoIdでは、ERC721 で提供される機能に加えて,さまざまな関数が Interface として定義されている.

その一例が以下.

  • トークンの burn 機能
  • トークンの mint を可能にする mintor の役割
  • すべてのトークンに対する transfer を停止させることができる pauser ロール
  • トークンIDおよびURIの自動生成

特に,ロール を付与して指定したアカウントに対して,アクション権限を付与できるのが特徴的である.

これは,AccessControl というモジュールを使用することで可能にしている.

コントラクトをデプロイするアカウントには,minter と pauser のロール,そしてデフォルトの admin ロールが付与され,他のアカウントに minter と pauser の両方のロールを付与できる.

NFT を発行するために提供される基本的な機能は以下.

  • 更新系
    • mint(address to) ... 自動生成されたトークンIDでトークンを発行し、トークンの所有者を引数のアドレスのアカウントに設定
    • transferFrom(address from, address to, uint256 tokenId) ... tokenIdのトークンをfrom アカウントから to アカウントに譲渡
    • burn(uint256 tokenId) ... tokenIDのトークンを消す
  • 参照系
    • name() ... トークンのnameを取得
    • symbol() ... トークンのsymbolを取得
    • tokenURI(uint256 tokenId) ... tokenURIを取得
    • totalSupply() ... トークンの発行総数を取得
    • ownerOf(uint256 tokenId) ... tokenIdのトークンの所有者のアドレスを取得
    • balanceOf(address owner) ... アドレスのアカウントのトークン保有数を取得

0811 _ エフェクチュエーション

最近,事業計画に向けてパートナーと2人で,リサーチして,コード書いてということをしている.リサーチする,書く&話すで共有,わからないこと/ 解決されていないことがわかる,リサーチする,,みたいなループを2人で短期間で繰り返していると,割と学習効率が良い.なので,こういうの学習プロセスとして理論化されていないかな,と調べていた.

しかし,ちょうどいいのが見当たらない.教育者と学習者がいるような教育実践における理論とか組織の学習理論などは見つかるが,うまくはまらない.調べていた中で目に止まったのが「エフェクチュエーション」という経営学の理論.上述の学習プロセスとは全く関連がない.が,気になってしまったので,整理した.

0801 _ Cosmos SDK チュートリアル

今日は,Cosmos SDK のチュートリアルを進めていた.

Cosmos SDK は,ブロックチェーンを開発するための開発キットで,
Cosmos Networkに対応するブロックチェーンを比較的簡単に作れる.
開発は Go言語 で行う,Rustでも開発できるみたい.
TerraSecret Network などが Cosmos SDK を使って構築されていて,ソースコードを読むと勉強になる.

具体的には Cosmos SDK の開発者向けインターフェイスである Ignite CLI を用いて開発を行う.
ブロックチェーンの機能は,提供されるモジュールを利用することで実装できる.
モジュールは /x で確認できる.

主要なモジュールは以下.

  • Tendermintモジュール
    • コンセンサスエンジンを管理
  • IBCモジュール
    • IBCへの対応
  • Authモジュール
    • アカウントを管理
  • Bankモジュール
    • その各アカウントが持つトークン残高を管理
  • Govモジュール
    • ガバナンスを管理
  • Stakingモジュール
    • Stakingに関する機能を提供

ローカルでテストするためのコマンドが提供されていて,$ ignite chain serveでテストネットを起動できる.
ただ,実行で躓いている.
上記コマンドを実行すれば,ソースコードをプロジェクト名のバイナリにコンパイルしてくれて,プロジェクト名(チェーン名)+d(例えば checkersというチェーンなら $ checkersd)というコマンドを利用できる,とあるのだが command not foundエラーで実行できない.
ref. https://tutorials.cosmos.network/academy/3-my-own-chain/ignitecli.html#

このコマンドが使えないと,トランザクションを実行できないのでもう少し粘ってみる.

0802 _ Ethereumのアカウントについて

Ethereum の アカウントという概念について,きちんと理解できていなかったので整理した.

Ethereumにおけるアカウントとは

イーサリアムアカウントは、イーサリアム上でトランザクションを送信できるイーサ(ETH)残高を持つエンティティである。アカウントは、ユーザーが管理することも、スマートコントラクトとして展開することもできる。
Ethereum accounts | ethereum.org

  • つまり,アカウント = ETHが保管される場所
    • アカウントとアカウント残高は,EVMの大きなテーブルに格納されていて,EVM全体の状態の一部として管理されている

2種類のアカウントが存在

  • EOA(Externally Owned Account: [外部所有アカウント])

    • 秘密鍵を持っている人なら誰でもコントロールが可能
  • コントラクトアカウント(CA)

    • Ethereum ネットワークに展開されたスマートコントラクトで、コードによってコントロールされる
  • いずれのアカウントも以下の機能を備えている

    • [ETH]と[トークン]の受信、保有、送信
    • デプロイされた[スマートコントラクト]と対話する
  • 2つのアカウントの重要な違い

EOA コントラクトアカウント
作成コスト かからない かかる(ネットワークのストレージを使用するため)
Txの送信 起点となる Tx の受信に応答してのみ Tx を送信できる
EOAからのTx EOA間はETH or トークンのみ可能 EOAからのTxはトークンの転送やコントラクトの作成等,多くのアクションを実行できる
対応する秘密鍵 持つ 持たない

Ethereum におけるアカウントを理解する上で、重要な3つのキーワード

  • アカウント

    • トランザクションを送り、残高があるエンティティ
  • アドレス

    • アカウント]は「0x」から始まるアドレスをもつ
    • このアドレスを使用してアカウントに資金を送金する
  • ウォレット

    • アカウント残高の確認、トランザクションの送信等、Ethereumのアカウントを管理できるインターフェイスあるいはアプリケーション
    • MetaMaskなど
  • アカウントはウォレットの実態のような認識だとイメージしやすい

アカウントは4つのフィールドをもつ

account

https://ethereum.org/ja/developers/docs/accounts

  • nonce
    • アカウントから実行されたトランザクションの総数,カウンター
    • トランザクションが一度だけ処理されることを保証するもの(リプレイ攻撃を防ぐ)
    • コントラクトアカウントの場合、この数値はそのアカウントで作成されたコントラクトの数を表す
  • balance
    • 所有するweiの数
    • Wei は ETH の最小単位であり、1 ETH = 10^18 Wei
  • codeHash
    • EVMコードのハッシュ値
    • コントラクトアカウントは、異なる操作を実行できるコードフラグメントがプログラムされている
      • このEVMコードは、アカウントがメッセージコールを取得した場合に実行される
      • 他のアカウントのフィールドとは異なり、変更することはできない
      • このようなコードフラグメントはすべて、後で検索できるように、対応するハッシュの下で状態データベースに含まれている
    • EOAでは、codeHash フィールドは空文字列のハッシュ
  • storageRoot
    • ストレージハッシュともいう
    • Merkle Patricia tree のルートノードのハッシュ値
    • デフォルトでは空

チームで Scrapbox を運用するときに役立ちそうなメモ

  • ページ頭に要約やページ自体の説明を書く
    • 一文で収まるとよい
  • 一文は完結に,情報密度の薄い部分は省く
    • 〇〇のように,〇〇のため,〇〇の場合,などで一文を繋ぐと冗長になりがち
  • 句点いらない
  • 固有名詞,専門用語はとりあえずリンクにしておく
  • リンクは # をなるべく使わずに,[] を使い文章で関係をつくる
    • #は名詞の書き投げになってしまいがちで,意味がハイコンテクストになる
  • 書きかけの記事は #wip などではなく,[TODO] 運用する
    • コーディングにおけるコメントアウトのように [TODO]:${やること} を書いておく
    • 定期的に TODO リンクをスクリーニングするメンテナンス体制を整えるの重要
  • なるべくリンクは入力補完で選択する
    • 表記ゆれを防ぐ
  • ページ間はなるべく疎結合に,意味を完結させる
  • 一つのページが長いと感じた場合は,部分的に他ページに切り出す

Scrapbox のページに関連用語の説明は含めない方が,情報管理がスッキリする

Scrapbox の運用を始めてから1か月弱が経った.
個人での運用と,複数人での運用を同時期に始めた.

僕が Scrapbox を使う最大の理由は,リンクによってページ間のネットワークを作れることにある.
リンクを有効に使うことで,最低限のコストで快適な情報管理を実現できる.
しかし,そのリンクの使い方にはクセがあり.提供される機能はミニマムなので,使いようによっては情報管理を快適にもするし煩雑で分かりづらいものにもできる.

今日はチームで運用する中で,リンクの使い方について感じたことを書く.
前置きとして,チームや個人毎の目的に沿った適切なリンクの使い方というのがあると思うので,これはその一例である.

それは,リンク運用を行う中で,ある用語もしくは概念,手順を解説するページに関連用語の説明を入れない,つまり関連用語をリンク化するのが良さそうということ.
これは Scrapboxer にとっては当たり前かもしれないが,Scrapbox に使い慣れていない人にとってはやりがちなバッドプラクティスではないかと思う.

例えば,「カレーの作り方」というページがあったときに,「じゃがいもとは」というセクションは不要だろう.
もしもページの中に組み込んでしまえば,「じゃがいも」を用いる他のページで情報が重複してしまって冗長になるか,省いた場合には「じゃがいも」を知らない人にとっては不親切である.
このときに,「じゃがいもを切る」という記述があれば,「じゃがいも」をリンク化し,その説明を別のページに切り出すことが有効だろう.

そうすれば,「じゃがいも」を知らない人が「カレーの作り方」もしくは「ポテトサラダの作り方」を参照したとしても,「じゃがいも」ページを参照すれば済むし,「じゃがいも」を知っている人にとっては,情報の密度が薄まることがなくカレーを作るための必要な情報だけを参照できる.

しかし,そのような運用をしたときに考慮しなければならないのは,同じ用語でも文脈によって意味が変わることである.
そのようなときは,「じゃがいも」ページには一般的な説明を記述して,特定の文脈の中で補足が必要な部分だけを文章として記述すればよい.
つまりページはなるべく疎結合にリンクさせ,独立して意味が完結することを目指す.リンクとして用いるページではその文脈に沿った補足情報を記述するのが良い.

Scrapbox は機能がミニマムだからこそ,(複数人で使う場合は特に)運用ルールが肝心になる.
使えば使うほど,細かいこういうふうに運用すればもっといい感じになるのでは?というのが湧き出てきて,どんどんハマってしまう不思議なツールである.

0822 _ PATH

Linux の PATH について.一度プログラミングを始めた頃に学んだが,そこからなんとなくの理解でこれまでやってきた.今日バイナリファイルをダウンロードして,そのコマンドのパスを通すという作業をしたので,改めて整理しておこうと思う.

そもそも「パスを通す」などで用いられる"パス"は,"コマンドサーチパス"の略称である.

Linux では通常,コマンドを実行するには $ /usr/bin/passwd のように,フルパスを指定する必要がある.しかしそれは面倒である.

そこで,Linus のシェルは,フルパスを指定しなくても,設定されたディレクトリにコマンドの実行ファイルを探しにいくようになっている.このとき「シェルがコマンドのバイナリファイルを探しに行くディレクトリを設定する」ことを「パスを通す」という.言い換えれば,コマンドサーチパスを設定するという意味になる.

コマンドサーチパスは,PATH という環境変数に格納されている.$ echo $PATH を実行すれば,設定されているパスを確認できる.PATHには,通したいパスを「:」区切りで指定する.

以下のような出力であれば,/usr/local/bin, /usr/bin, /bin にパスが通っていることが分かる.

$ echo $PATH
/usr/local/bin:/usr/bin:/bin

追加したいときは,$ export PATH=$PATH:/usr/sample のように,現在の $PATH に「:」で繋げて通したいパスを指定すれば良い.また,同名のファイルが複数のディレクトリにあった場合,PATH に定義されたディレクトリのうち先頭から優先してファイルを実行するので注意が必要.また,セキュリティの観点からも余計なディレクトリを追加せず(パスを通さず),安全なディレクトリに絞って指定することが重要である.

0810 _ 納豆

洗濯物をコインランドリーに持っていった.近くにいい感じのコインランドリーを見つけて利用している.両替機もあって便利.

コインランドリーで洗濯をすると2回空白ができる.洗濯機を回して31分,その洗濯物を乾燥機に入れて40分.

洗濯機を回している時間に近くを散歩した.夕方に差し掛かる時間で日陰でも辛い暑さだったが,引っ越してきて間もないのでまだ歩いたことがない場所が多く,散歩は苦じゃなかった.

平日の商店街はお昼時をすぎれば閉じてしまう店も多い.近くは住宅街が広がっていて,道が入り組んでいる.家の表層から表出する多様な生活が観られて楽しい.
まだ行っていない方の大通りにも出てみた.良さそうな花屋を見つけて入ってみたが,手持ちが少なかったので何も買わずに出た.またすぐにでも行ってみる.小さくて落ち着きのある雰囲気の喫茶店も見つけた.

コインランドリーに戻って,洗濯物を乾燥機へ移す.スーパーへ買い物に行く.

最近,17時くらいにお腹が減るので,そのときに食べるちょうどいい間食を検討する.友人に相談した結果,ナッツ,ゆでたまご,フルーツ,プロテインあたりが暫定候補.なるべく手を汚さずに食べられて,洗い物は少なく,食べるための手間がかからないようにしたい.あと保存が利くものがいい.

とりあえず,間食用にバナナ,たまごを買った.そしてなぜか納豆がピンときた.いままで食べようと思って食べたことがない.幼稚園児くらいのときに一度食べて吐いてから,一口とか試してみたことがあったかもしれないが,食べた記憶がない.納豆を食べようと思いついことがなかったので,この機会を逃すまいとカゴにいれる.どれがいいかも分からないのでパッケージを見たことがあるやつを適当に選んだ.

家に帰って,納豆を机の上に出してみる.パッケージや容器を見てみたが食べ方が書かれていない.「タレ」の袋に何やら書いているのを読むが,袋の開け方を丁寧に説明しているだけだった.
とりあえず,糸に注意しながらフィルムを脇によけて,タレをかける.たしかヒトが食べるときに混ぜたりしていたので,混ぜてみる.粘つきが出てくる.どれくらい混ぜればよいかもわからないので,頃合いをみてなんとなく食べる.おいしくはなかった.匂いに関しては,思っていたよりも抵抗はなかった.豆の風味は感じる.ただ,おいしさがわからなかった.付属のからしをつけると少し食べやすくなった.

納豆は量的にもちょうどよいし,食べるための手間もそんなにない.それに健康に良いとどこかから聞いたこともあるので,おいしいと思えれば,間食としてはだいぶあり.納豆は,調整可能な工程があり,もしかしたらもっとおいしい食べ方があるかもしれない.なにより,食べられることが分かったので,おいしさが分かるようにトライしてみたい.とりあえずここ数日食べてみて,他の候補と比べてみようと思う.

ベターな選択

6年前に留学をした.そのときに仲良くしていた人たちとの飲み会に行った.お酒が弱いなりによく飲んでしまった.もともとそういう場に行く機会は少ないが,周りの友人も就職して忙しくなったし,パンデミックのニューノーマルを経てより出不精になっていた.二日酔いとまではいかないが,よく眠りにつけなかったので一日体調は優れなかった.

ここ数年,渋谷に行くと店にたどり着くまでに,元気がなくなってしまう.電車を降りて改札を出ると飛び込んでくる多量な情報に一瞬ハイになるが,2分も歩いていればゲンナリしてくる.足取りがみるみる重くなる.5年ほど前は毎日渋谷にいるような生活をしていたので,感覚があまりに変わってしまったのだと再認識する.特に最近は家の徒歩10分圏内で生活しているのもあるだろう.パーソナルスペースを守ることができない密度に慣れていない.

結局コロナの都合で,7人集まるはずが4人になった.あまりにも当たり前になりすぎた理由.しようがないことである.ここまで続くと「落ち着いたら」が意味するところは変わってきた.他の人たちと会えないのは残念だった.
1年ぶりのメンバーもいれば,4年ぶりのメンバーもいた.山から降りてきたの?と言われ,なんのことか3時間後に気づくくらいに,年数が経っていたことに驚いた.そういえば4年前は山奥に住んでいた.

”尖っていた”とも言われた.そうか,尖っていたのか.あのときはいまよりずっと若く,自分でも何を考えていたのかよく分からない.割と自己と他己は違って映るもので,いまから振り返ればどちらかというと病んでいただけだと思う.そういうことを考えると,会えなかった人,言わなかった言葉に注意を向けると心情に近いものが捉えられると思う.

内一人の友人は,ちょうどメガベンチャーを退職して起業するらしい.友人からそのような話は今までも聞いていたので,うれしかった.偶然にもぼくも最近事業準備に取り組んでいて,タイミングが近かった.まあそういうものなんだろう.友人との付き合いのなかで彼がそう選択することに驚きはなかったが,自分についてはあまりそういうことを想定していなかったので,やはり自分のことなんて他人のほうがよく分かるものなのかもしれない.

お店はコース料理もおいしかったし,気持ちのいいテラス席で久しぶりにスパークリングワインも飲んで気分がよかった.
2軒目は一人のメンバーから,彼氏が別の場所で5人で飲んでるので,合流しようという提案があった.久しく新しい交友関係,そこまでいかずとも接触というものがなかったので,怯んだ.というか,最近はそういう機会を意識的に避けていた.それに8人以上の飲みの場は経験的にきつい.大体はその場を茶化して,よく知っているすぐ近くのお店へ行くのがベターだった.

結局,不可抗力的に合流することになった.3人以上いた時のその場のノリには勝てない.

三軒茶屋へ向かうタクシーの中,変わらず笑って会話していたが,明らかに緊張が高まっていた.

しかし,行って正解だった.

店に入って十数分は,人見知ってしまったが,30分後には久しぶりに腹筋がつるほどに笑っていた.裏笑いではあったが,ぎこちない状況の中で,あるひとの表情や行動が重なった面白さがあり,笑うのがきつくて必死に仕事のことを考えたほどである.まさに緊張の緩和であった.優しく安心感を纏った即反射的な一種の身体的コミュニケーションのパターンが,学生時代にいたどこまでも優しい先輩とのノリで,ノスタルジーを伴う面白さがあった.

すごく良い人達で,初対面の人が複数いる中でもうまく楽しめて盛り上げられる力量はすごい.三軒茶屋の奥深さを垣間見ることができた.正直名前はだれも覚えていない.ああいう場では名前よりも優先されることが多いだろう.

3軒目のダーツバーでもひとしきり楽しんで,元々のメンバーと共に途中で抜けたが,もう少しお礼をきちんと言えばよかった.悪い飲み方はしていないが,お酒の場は楽しいし細部は覚えていないうえ,気分の揺り戻しか,次の日に反省することが多い.

ある程度ベターな選択を想定できてしまうようになったがゆえに,不確実性の高い選択をしないようになっていたことを改めて認識した.

帰路が同じ方向の友人とタクシーで帰った.車中は,かつてルームシェアをしていた当時のように技術や態度の話ができてたのしかった.

途中下車して30分ほど歩いて帰ったが,適度に歩くのは酔い醒ましに良い.迷ったらより分からない方の道に行ってみるのもたまにはいい.

言葉の多義性

インターネットにより醸成された文化を過ごすことで,他人の言葉を読み聞きする機会は圧倒的に増えている.
そんな中で,ときどき思うこと.

他者が発した言葉を,自己の認識する意味のみで理解するのと,相手に成り代わったつもりで理解してみるのとでは,全く変わった意味になる.
後者の態度で解釈しようとすると,その発言の意図やある程度くるめられた細部の概念が分かることがある.

文脈を踏まえつつ,相手の経験やバックグラウンドを根拠に,相手がどのような認識で発しているかという観点から言葉を解釈することを,日常的に行えている人は少ないと思う.
いわゆる環世界を意識すること.「前提」をずらすと「言葉」の意味は揺らぐ.

詩的な言葉とは,そういった言葉の多義性を直感させる力がある.
それは発話者の像もいらないし,言葉に対する無意識な前提がずれて,いつも目にしている言葉が急に広がりを持つ驚きが在る.

"Social Inequalities Explained in a $100 Race"

Social Inequalities Explained in a $100 Race - Please Watch to the End. Thanks.

今日,たまたまこの動画を観た.短い動画であるが,観終わったあとは「んーなるほど」と動画の尺以上に考え込んでしまった.

クレジットはLink Yearという団体.調べてみると,米国のスクールを運営する基督教系の団体のようで,高校卒業後の若者を対象としたプログラムを提供しているらしい.

この動画を観て思うことは,人によって割と違うんじゃないかと思う.これは社会で生きていくことの比喩表現だ.イデオロギーをぶつけ合う前に合意を確認すべき前提を示している.社会の実態のようなものを捉えることは困難だし,身の回りの集団や自身の環境 / ポジションに対する自己評価の違いによって,感じることやそこから導き出すことは大きく引っ張られるんじゃないか.

この動画の主題は「スタートラインの差」,つまり特権についてであろう.それを見せつけられたときに何を思うか,それも他人事ではなく,さっきまで笑い合っていた友人が横にはいない.教師がルールを読み上げるシーンは徹底して残酷である.経済,教育,家庭などに関した環境の格差による有利不利を見せつける.実社会では,目には見えないが確かに「スタートライン」はある.それは,美辞麗句に覆われて,昔より見えにくくなったかもしれない.この教育プログラムで示すものは,単に「公平」という言葉を飾っているだけの学校では教わらない内容だろう.

動画全体の演出は苦手だが,終盤の俯瞰のカットはいい.差を目の当たりにして,何を思ったって号令がかかれば始まるレースにどういった態度で望むか.スタートラインの差は結果の言い訳にだってできる.スタートした後の,それぞれの走る姿勢や態度は示唆に富む.動画には映っていなかったが,スタートラインで立ち止まる生徒がいたかもしれないし,自身の立ち位置に有利な方向に走っていった人もいたかもしれない.総じて,どのスタートラインからでも全力で走る人は尊敬する.

Github Pagesでブログを始める

ただそれだけ.
内容は特に決めていない.
日々のメモみたいなものか,仕事関連で書きたいものなのか,技術関連のことか,そのあたり.

ブログを作るなら個人のページで運用したかったので,とりあえず Github Pages で始めれば,個人サイトをホスティングする際も移管がしやすいかと考えた.
Github で運用すれば,慣れているし気軽に書けそう.

そんな中,gialogで簡単に日記を作るやつをやった という記事を見て,すぐに始められるしいいなということで早速書いてみている.

0821 _ Zuppa

お昼にいつも行く中華屋さんに向かうと,閉まっていた.少し遅めのお盆休みに入ったようだ.特にお店も決めずに,駅の方へ向かった.ふとビルの2階にサイゼリヤの看板を見つけて,食べたくなったので入ることにした.久しぶりだった.とりあえず,マルゲリータは頼むことにして,もう一品に Zuppa なるものを頼んだ.数種類の野菜といんげん豆を煮込んだスープのようなもので,ミニフィセルと一緒に食べたがすごくおいしかった.これを食べにまた来たいと思った.

お昼時だったので店員も忙しなくしていて,注文用紙を書いたり調味料を頼んだりあらゆるものがセルフサービスになっていた.つい最近行ったスシローでも,店員との接触があまりにも少ないことに驚いたが,サイゼリヤも似たような変化を感じた.チェーン店は(デジタル/アナログ関わらず)システムを導入することで,効率化して人手を減らす流れが進んでいるのだろう.いつも行く近所の蕎麦屋や中華屋,喫茶店での其とないコミュニケーションや受けるサービスの貴重さが際立って感じられるようになった.

0804 _ Solidity 開発における Visual Studio Code の警告

Visual Studio Code で開発を行うと,バックグラウンド分析により警告を表示してくれる.
大体は気になりつつも,その場しのぎで対応してしまっているので,今日は Solidity 開発において初歩的な内容について,いくつか事例を挙げ対応策をまとめた.

1. SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing "SPDX-License-Identifier: <SPDX-License>" to each source file. Use "SPDX-License-Identifier: UNLICENSED" for non-open-source code. Please see https://spdx.org for more information.

現象

スクリーンショット 2022-08-04 21 35 17

原因

SPDX license identifiers を指定していないから
Solidity はv0.6.8からSPDX license identifiersを取り入れた

解決策

SPDX license identifiersを明示する(↓は [UNLICENSED] の場合)

+ // SPDX-License-Identifier: UNLICENSED
  pragma solidity ^0.8.15;

2. Source file requires different compiler version (current compiler is 0.8.13+commit.abaa5c0e.Emscripten.clang) - note that nightly builds are considered to be strictly less than the released version

現象

スクリーンショット 2022-08-04 21 39 16

原因

Visual Studio Code の workspace compiler のバージョンが,指定したものよりも低いから

解決策

workspace compiler をコードで指定したものに揃える

  1. 任意の場所で右クリック => 「Solidity Change workspace compiler version (Remote)」を選択
  2. コードで指定したバージョン以上のバージョンを選択する

ref. How to Change the Solidity Compiler in VS Code - Dapp Dev Tips - Medium

3. Source "XXX.sol" not found: File import callback not supported

現象

スクリーンショット 2022-08-04 21 43 50

原因

node_modules/配下のライブラリを呼んでいないため

解決策

デフォルトのパッケージパスにnode_modules/ を指定

  1. settings.json に↓の記述を追加
    • cmd+shift+p で「settings json」と検索すれば開ける
+     "solidity.packageDefaultDependenciesContractsDirectory": "",
+     "solidity.packageDefaultDependenciesDirectory": "node_modules",

ref. https://ethereum.stackexchange.com/a/111572

0812 _ トラップ

午後に大きめな予定が入っていると,午前中がうまくワークしない.あとの予定に気が散ってしまう.時間は限られていて見積もりやすいのだから,うまくこなしたい.あらかじめやることを決めておくという当たり前の対策が必要そうだ.

...

友人が物件を引き払うのに付き合った.都内を運転するのは久しぶりだった.環7と山手通りの,位置と他地域との接続関係が少し理解できた.

残っていた荷物を処理するために,友人は不用品回収業者を呼んでいた.現場に居合わすことが出来なかったが,後から聞くと想定よりも多くのお金を支払ったらしい.中サイズのダンボール八個強の荷物(軽トラ半分の面積くらい)で,電話で依頼したときは 14,800円〜 と言われていたものが,なんと10万円強を請求されたみたいだ.完全にぼったくりである.

退去立ち会いの時間が迫っていて(20分間くらい)余裕がない状況の足元を見られてしまったよう.電話するときに,そのような状況を伝えていたことも,相手に隙きを見せてしまったのかもしれないと嘆いていた.
ああ,すぐそこに闇はあって,いつ巻き込まれるのかわからないのだなと虚しくなった.当たり前だが,人は必ずしも善意で動いているわけではない.その上,当然のように明らかな悪意を持って働きかけてくる人も多くいる.公私ともに周りの人に恵まれていると忘れてしまいがちだが,こうして時たま思い知らされる.

ネットで調べてみると事例多々.不用品回収業界はわりとぼったくりのトラップが蔓延しているようだ.サービスを比較するにもレビューが機能しておらず,口コミサイトも完全に怪しい.不用品回収でぼったくりが発生してしまう理由としては,以下のようなものがあるらしい.

  • 相場価格が分かりにくい
  • 消費者側の立場が弱い
  • 通報できない

こういう業者がのうのうとできること自体が,社会の小さなバグだろう.自治体の回収サービスが,便利で安全なので基本的にはそちらを利用するようにしよう.いずれにせよ,悪質な業者と関わらないためには,1週間前には準備をしておくことが肝要.余裕の無さは隙きをつくる.

0817 _ 環境と飽き

先日,夜に1時間超歩いて帰宅した.それが最高によかったので,毎日夜に近所を数十分歩こうかと思う.

散歩は好きだ.予定がある場所に行ったとき,近くに行ったことのない場所があれば,早めに行ってとりあえず歩くことにしている.新居を決めるときも,大体エリアを決めておいて数日間歩いてみて絞っていく.
しかし,最近は歩く機会が減った.普段の移動の際になるべく歩くことは変わらないが,この時間は散歩しようということをあまりしなくなった.散歩は特に,歩くことだけではなく目的地がないことが重要である.移動として歩くなら,最短の道を選ぶことが重要だが,散歩では道の奥性や通ったことがないか,通りたいという直感があるか,によって道を選ぶことが重要である.
散歩は,とにかく気分が良くなる.特に目的はなく散歩する.考えごとをするのにもいい.血流がよく流れ,情報処理としても外部刺激が丁度いいのだろう.散歩するときは,その街に住んでいるつもりで歩いてみるのが楽しい.歩きながらそこでの生活を想像してみる.あるいは,家々を見ながらそこでの生活を想像してみる.自分好みの住宅を見つけたときは楽しい.近所であれば,発見が楽しい.

しかし,家の近所の場合は,環境になれてくると飽きがくる.公園や施設,お店,建物を知り尽くしてしまい,どこも通ったことのある道になってしまうし,現在地と家までの距離がわかってしまうので,遠くなってしまう道を面倒で選ばなくなって,つまらなくなってくる.これが散歩に億劫になってしまった大きな要因だ.

だが,家で仕事をするのが続き,外に出ない習慣を断ち切りたくなってきたので,夜に散歩することを続けてみようと思う.最低10分歩くことだけ決めて,あとは気の向くままに歩いてみよう.

0813 _ wp

Aptos の WP を読んでいた。
Ethereumのドキュメントでの知識が理解の助けになった。Moveは結局のところ書いてみないと分からない。
チェーンのWPは、bitcoin,ethereum,solanaあたりを読んでおけば、割とつかみやすそう。

0820 _ Aptos のアカウント生成

Aptosにおける,アカウント作成時の暗号化手順

  1. ユーザーがアカウント作成要求を送信
  2. 秘密鍵と公開鍵のキーペアの生成
  3. ユーザーから,そのアカウントに適した署名方式を取得
    • 単一署名方式 or マルチシグ方式
  4. 公開鍵とユーザーの署名方式を組み合わせ,32バイトの認証鍵を生成する
  5. 認証鍵とシーケンス番号(初期値0)の両方が,初期アカウントリソースとしてアカウントに保存される
  6. 認証鍵から32バイトのアカウントアドレスを生成

シーケンス番号は,そのアカウントから送信されたトランザクション数を示す.トランザクションにはシーケンス番号を含み,トランザクションを処理する際に,トランザクションに含まれるシーケンス番号とアカウントが保持するシーケンス番号を比較し,一致する場合のみ実行に移す.これはリプレイ攻撃を防ぐためのもので,Ethereum だと nonce にあたる.

アカウントアドレスは,アカウントの識別子として重要なリソースであるが,アカウント生成時に導出される32バイトの認証鍵がそのままアカウントアドレスになる(例: eeff357ea5c1a4e7bc11b2b17ff2dc2dcca69750bfef1e1ebcaccf8c8018175b ).
秘密鍵と公開鍵は後から更新でき,その場合は認証鍵も変更される.しかし,アカウントアドレスは永続的(不変)であり,認証鍵とアカウントアドレスが一致するのは,初期のみで必ずしも一致しない.つまり,既存のアカウントアドレスが変更されることはない.

Aptos の署名方式には2つある.

  1. 単一署名方式
  2. マルチシグ方式

それぞれの署名方式は以下の署名スキームを用いる

  1. Ed25519
  2. MultiEd25519

また,アカウントの認証鍵を生成するには,そのアカウントについて1バイトの署名方式の識別子の指定が必要で,それぞれ以下のように識別子が定められている.

  1. 単一署名方式: 0x00
  2. マルチシグ方式:0x01

それぞれの署名方式によるアカウントの生成手順は以下である.

  • 単一署名方式

    1. キーペア(公開鍵,秘密鍵)の生成
      • RFC 8032 で定義された Ed25519 curve 上の PureEdDSA スキームを使用
    2. 公開鍵から,32バイトの認証鍵を導出
      • auth_key = sha3-256(publicke | 0x00)
    3. (永続的な)アカウントアドレスとして,2で導出した初期認証鍵を設定
  • マルチシグ方式

    • K-of-Nマルチシグ認証を用いるため,定数 N, K を指定する必要がある
    • K-of-Nマルチシグ認証では,アカウントに合計 N 人の署名者が存在し,N 人の署名のうち少なくとも K 人がトランザクションを認証するためにしようされなければならない
    1. キーペア(公開鍵,秘密鍵)の生成
      • N個のEd25519 公開鍵 p_1, ..., p_n を生成
    2. トランザクションの認証に必要な署名の閾値であるKの値を決定
    3. 公開鍵とKから,32バイトの認証鍵を同種
      • auth_key = sha3-256(p_1 | ... | p_n | K | 0x01)
    4. (永続的な)アカウントアドレスとして,3で導出した初期認証鍵を設定

0816 _ 紀行

ここ3日間,仲良くしていた高校の同級生が東京に遊びに来ていて,外に出かける機会が重なった.深夜にかけてお酒を3日連続飲む機会なんてめっきりなかったので,身体にはきちんと響いている.

箇条書きで記録しておく.

  • 初の「リアル脱出ゲーム」を体験した

    • 僕の認識だと4年くらい前から大きなイベントとかが広告で目に付くようになった
      • リアルな街が十分楽しいし,友達も多くない自分と結びつくものを感じていなかった
    • 特に説明もなく指定された集合場所に仕事終わりに向かうと,リアル脱出ゲームのお店だった
      • こういう機会がないと,きっとこの先も体験しなかったと思う
    • 参加してみると,エンタメとして練られていて確かに楽しい
    • いわゆる謎解きクイズの類(謎の暗号や記号の関係を見出して意味を悶々と考えるようなもの)を解くことで脱出するといった簡単な理解だったが,それだけではなかった
      • 割と,柔軟に考えることよりも動物的な嗅覚がキーになる
      • 身体を上手く使って解決するようなポイントもあり,そこが一番時間がかかった
      • 言い古されたことかもしれないが,新たな関係構築を目指す集団にハマりそう
        • 仕事でいえば,チームビルディングなど
        • すでに仲の良い人と行ってみるのも新鮮でよい
          • が,強制的な連帯や協力関係の中で互いの振る舞いが見られるフレームワークとして有効なので,あまり関係性が固まっていない人たちでいくと意外な面を知れて楽しそう
  • 夜の新宿,サラダボウルだ,毎回おもってしまう

    • 特定の場所において”普通”となる特異性が,な`わばりを作るようにゆるやかに連続しながら分布している
    • ゴールデン街の2階で看板もない,部室くらいの広さのバーを1軒目に選んだ
      • フードはないが,ウイスキーの種類が多く,さくらウィスキーと,京都煎茶ウィスキーがおいしかった
      • バッファロー吾郎似のマスターにざっくりとした内容のトルココーヒー占いを披露してもらった
    • 思い出の抜け道で,異国感漂う店内で少し高いがおいしい中華を食らった
    • 思い出の抜け道もゴールデン街も,計画して作れないスケールで成り立つ場所で,自然のような街だった
  • 二丁目は,新たな境地だった

    • エリア内に入ると明らかに空気が変わる
    • ある程度歩き回ってみたが,他の歓楽街と同様にお店ごとに形態,雰囲気,客層など多様である
    • 嗅覚だけで選んだお店が,近年稀に見るグッドチョイスだった
      • ママが最高に明るい
      • 僕たちは明らかな外様だったので,最初こそ少し警戒されたが途中からはすごく楽しかった
        • 作法も知らず,おそらく愉快ではない質問もあったと思うが,真摯に明るく答えてくれた
      • 知る機会のなかった,日常のことや業界の深い事情まで聞かせてもらい,想像の限界を壊せた
        • ステレオタイプは想像の限界にあると思っている
      • 店同士や店と客のコミュニティの中には明確な線引きがある
    • 迷ったら二階以上の店
    • 後日ピンを立てようと Google map でその店を開いたらレビューは0件で,もしも行く前に見てたら行ってない
      • 見知らぬ場所で,見知らぬ世界線の日常を覗くということにインターネットは役に立たない
  • 所沢の角川武蔵野ミュージアムで,現代における街のモニュメントとは何かを考えた

    • 行く前の印象として低層に広がるまちの中にずどんと立っているイメージだったが,思っていたよりも周辺に馴染んでいた
    • 着いた時間が遅く,展示を見られなかったのは残念
      • ゴッホ展はぜひ行きたかった
      • シンボリックな外観が人目を引くが,内外装のディティールデザインが凝られていて感服した
    • 併設する武蔵野坐令和神社が美しかった
    • 子どもたちが水浴びする姿には,神聖さがある
  • 東久留米のスパジャポ,行くなら平日の昼

    • 人が多くて落ち着く場所はない
  • 渋谷,鴨と葱,牛タン,日本酒が最高のお店があった

    • 大人な飲み会に使える
  • 西東京で暮らすなら Loop は登録しておいたほうが便利

  • 渋谷から1時間超歩いて帰宅した

    • 酔い醒ましに歩けるところまで歩こうと思っていたが,家まで案外歩けた
    • 深夜の駒場は,ものすごく良い
      • 日本民藝館,夜にもフラッと入れるようになれば最高だな
    • 道路脇のセミが,ふっと我を思い出させる
    • 勢いで気になっていた近所の神社にお参りした
      • 境内のベンチでぼーっとした
        • よい落ち着きスポットを見つけた
        • 神社の空間の強さを改めて感じた

0818 _ Aptos と Move

AptosMove の開発環境構築をしていた.Aptos は,Meta(旧Facebook)社でブロックチェーンプロジェクトを行っていた元 Diem(旧Libra)メンバーによって立ち上げられたプロジェクトで,Diem プロジェクトの一環で開発されたプログラミング言語が,Moveである.今年1月にMeta社が Diem 事業から手を引いたのち,元メンバーたちが複数のプロジェクトを立ち上げ,Move エコシステムとしてクリプト業界に新たなムーブを作っている.Aptos の他に Sui0L Netowork などのプロジェクトがあり,いずれもオープンソースで開発されていて Discord でコミュニティに参加することができる.

そんな Move はググラビリティが悪い.新興言語なのでそもそも情報が出回っていないことも大きな要因だが,move という単語で見当外れの情報がヒットしまくる.作業をしている中で検索しても分からないことがあったので,とりあえずAptos の Discord に投げてみた.2件ともすぐに返事を返してくれた.周りに開発者仲間がいないので,オープンな開発やコミュニティはすごく助かるし,そういった運営方針がクリプトのプロジェクトの場合はスタンダードで,そこが素晴らしいと思う.

0819 _ Aptos SDK

Aptos は SDK を提供している.クライアントが,公開API に接続して Aptosブロックチェーンとインタラクションを行うための開発者向けのインターフェイスである.

提供している主な機能としては以下である.

  • キーペアの生成
  • トランザクションの署名・送信
  • 送信したトランザクションの状態取得
  • BCSライブラリ
  • 特定のアカウントに属するリソース,モジュール,トランザクションのクエリ
  • 開発のための faucet クライアント
  • NFTトークンのミントやクエリ

異なる言語に対応しており,Typescript SDK と Python SDK の2つを提供している.おそらく Typescript SDK がメイン.

Typescript SDK は3つのレイヤーで構成されている

  • トランスポート層

  • コアSDK層

  • アプリケーション層(optional)

  • アーキテクチャ

    • アーキテクチャ

トランスポート層は,Aptosの公開APIの仕様に基づいた class のセットを提供していて,APIのエンドポイントにペイロードを送信する役割.

コアSDK層は,殆どのアプリケーションで必要とされるような機能を提供していて,上述の主な機能のほとんどを提供する役割.

アプリケーション層が提供する機能は限定的で(おそらく今後はサードパティが担っていくと思う),NFTトークンの作成とクエリのためのメソッドを提供している.

インストール手順はそれぞれ以下

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.