プログラミング ITインフラ 新技術

暗号資産FlareのValidatorの仕組みドキュメント日本語訳

暗号資産FlareのValidatorの仕組み

概要

フリーランスエンジニア スリーネクスト

暗号資産のFlareNetworksが2021年7月末ごろにローンチするということですがバリデーターとして利益を出す方法があります。

特にGoエンジニアでDockerを使いこなせるのであればバリデーション報酬を得るのは魅力的です。

Flareのバリデータとしてのアンダーライイングチェーンマイナー

Flare Networkのコンセンサスを得るために、下位チェーンのマイナーを活用する。

Flareは、他のすべてのネットワークから流動性を集めて、スマートコントラクトで運用できるように統一された合成可能なシステムにすることに重点を置いている点で、ネットワークとしてはユニークな存在です。

Flareのバリデータ構造は、この考えを利用しています。簡潔に言うと、Flareネットワークの制御権は、Flare上の基礎となるブロックチェーンの安全性に最も貢献しているマイナーに、時価総額で加重して比例的に与えられます。

Flareでバリデータリストを構築する

毎週、基本となるネットワークのマイナーのリストが決定論的に生成され、自分のネットワークの安全性への貢献度に応じて重み付けされます。

これは公的に検証可能なプロセスであり、中央の当事者によってコントロールされるものではありません。例えば、プルーフ・オブ・ワークネットワークの場合は、あるマイナーが一定期間に何ブロックの採掘に成功したかに基づいて計算されます。

この検証者リストのサイズに制限はなく、Flareに統合された基礎となるチェーンの中から興味のあるマイナーを選んでリストを作成する。

例:あるチェーンの3人のマイナーがFlareのバリデーターになることを希望したとします。

  • マイナー1は、自分のチェーンの過去100ブロックのうち20ブロックを採掘した
  • マイナー2は、そのチェーンの過去100ブロックのうち5ブロックを採掘した
  • マイナー3は、チェーン上の過去100ブロックのうち10ブロックを採掘した

そして、Flare上のバリデータとしての各マイナーの相対的な重み付けを行う。

  • マイナー1:0.2/(0.2+0.05+0.1) == 0.2/0.35 == 0.57
  • マイナー2: 0.05/0.35 == 0.14
  • マイナー3:0.1/0.35 == 0.29 に注意。0.57 + 0.14 + 0.29 == 1.

そして、Flare上の他の基礎となるチェーンと比較して、この基礎となるチェーンの相対的な重み付けを以下のように計算します。

  • チェーン1の時価総額は10億ドル
  • チェーン2の時価総額は20億ドル

そして、これらの基礎となるチェーンのFlare上での相対的な重み付けを行います。

  • Chain 1: 0.33
  • Chain 2: 0.66

これは、チェーン2の時価総額がチェーン1と比較して2倍であるためである。 チェーン1の採掘者のウェイトをFlareのバリデータとして取得するには、そのチェーンのウェイトに自分のチェーン内のウェイトを掛け合わせる。

  • Chain 1, miner 1: 0.57x0.33 = 0.19
  • Chain 1, miner 2: 0.14x0.33 = 0.05
  • Chain 1, miner 3: 0.29x0.33 = 0.09

Validator リワード(報酬)

ウィークリーグラウンドトゥルースリストに掲載されているバリデータは、自分のオリジンチェーンの状態に関するデータ利用可能性の証明を提出して競うことができる。

これはステートコネクターシステムとして知られている。このゲームで成功すると、Flareのバリデータは他のネットワークでのブロック生産に似たインフレーション型のマイニング報酬を得ることができる。

検証者がデータ利用可能性証明の競争に勝つ確率は以下のようになっている。

  • バリデータの稼働時間
  • Flareでのバリデータのコンセンサス(合意)抽出確率
  • 裏面のチェーンにブロックを生成することで、検証者は他の検証者よりも早くデータにアクセスできる。

コード

カスタムサンプリング確率でFlareのバリデータセットを更新する: vm.go, line 771 ->.
コードのリンク

func (vm *VM) updateVdrSet(subnetID ids.ID) error {
	vdrs := validators.NewSet()
	for _, validator := range vm.ValidatorConfig.Validators {
		err := vdrs.AddWeight(validator.ShortNodeID, uint64(validator.Weighting))
		if err != nil {
			return err
		}
	}
	err := vm.vdrMgr.Set(constants.PrimaryNetworkID, vdrs)
	if err != nil {
		return err
	}
	return nil
}

起動時に--validators-fileフラグを使用して、コマンドライン入力でサンプリング確率を独立して提供。

./build/avalanchego \
    --http-host= \
    --public-ip=127.0.0.1 \
    --snow-sample-size=2 \
    --snow-quorum-size=2 \
    --http-port=9650 \
    --staking-port=9651 \
    --db-dir=$(pwd)/db/node04/ \
    --staking-enabled=true \
    --p2p-tls-enabled=true \
    --network-id=coston \
    --bootstrap-ips=$(curl -sX POST --data '{ "jsonrpc":"2.0", "id":1, "method":"info.getNodeIP" }' -H 'content-type:application/json;' https://coston.flare.network/ext/info | jq -r ".result.ip")  \
    --bootstrap-ids=$(curl -sX POST --data '{ "jsonrpc":"2.0", "id":1, "method":"info.getNodeID" }' -H 'content-type:application/json;' https://coston.flare.network/ext/info | jq -r ".result.nodeID")  \
    --staking-tls-cert-file=$(pwd)/config/keys/node04/node.crt  \
    --staking-tls-key-file=$(pwd)/config/keys/node04/node.key \
    --log-level=debug \
    --log-dir=$LOG_DIR \
    --validators-file=$(pwd)/config/validators/coston/1619180000.json \
    --alert-apis=https://flare.network \
    --xrp-apis=$XRP_APIs_JOINED 

validators.jsonの定義例。

{
  "validators": [
    {
      "nodeID": "NodeID-GQ4292fG2RMRWa7RtphPJTYHeMR5YAQPM",
      "evmAddress": "0x3769119b83c2f53c182a4f725917065179795542",
      "origin": "ltc",
      "weighting": 25
    },
    {
      "nodeID": "NodeID-GMHrauiUPGikdbT4Z65dEBFpfQWKovLy5",
      "evmAddress": "0x2cae9302f38b62425eebfe83fe78d49d6f2f8707",
      "origin": "doge",
      "weighting": 20
    },
    {
      "nodeID": "NodeID-DhdvGK268cNmDPzvh1Vw7rzSmT1tptSUB",
      "evmAddress": "0xd5147e4f21385355c2c4735830f716cd5a50f778",
      "origin": "xrp",
      "weighting": 19
    },
    {
      "nodeID": "NodeID-hBfmpWJ87GSPHUtxthGd2fHsVdaGmkgq",
      "evmAddress": "0xba2ac417f2d878c48028400b26fec3ecc0adf8a3",
      "origin": "xlm",
      "weighting": 14
    },
    {
      "nodeID": "NodeID-LtahNtUH9tb4VCZZipLNqkBCxzjpFTdHs",
      "evmAddress": "0x4f6e59dd6186aca90bb15ae6e4993bc3a570c013",
      "origin": "doge",
      "weighting": 11
    },
    {
      "nodeID": "NodeID-34KwvqefLeXYPrzcNjc4yMPRpMfE89ppw",
      "evmAddress": "0x9e32c568279a54874ef0dcad4f0e34f04c34ea45",
      "origin": "xlm",
      "weighting": 8
    },
    {
      "nodeID": "NodeID-G9CJC4te7FyH1XyMugsRqVYYZBuTreFvd",
      "evmAddress": "0xcbb8f758007062ad35073d306a89216917dc370b",
      "origin": "xrp",
      "weighting": 2
    },
    {
      "nodeID": "NodeID-HhAo3hwTn73UB1LxU131gXrs7HMnMxmdE",
      "evmAddress": "0x20a236b2ad0f6fff7702cf4ceec77b17ae140d2f",
      "origin": "ltc",
      "weighting": 1
    }
  ]
}

上記のリストの中で、コンセンサス時に特定のバリデータがサンプリングされる確率は

バリデーションの計算式

Flareのコンセンサス定義は決定論的に生成され、検証者リストは信頼できる第三者に頼ることなく、誰でも生成することができます。

Flareのユニークな利点は、プルーフオブステークに代わるコンセンサススケーリング手法であり、基盤となるチェーンのマイナーに直接制御権を与え、スマートコントラクトとの対話を目的とした統一された合成可能なシステムへのチェーンからの流動性の蓄積を可能にする点にあります。

こちらのサイトを日本語訳しています
Underlying Chain Miners as Validators on Flare

-プログラミング, ITインフラ, 新技術