๋น์ฝ ์ฒด์ธ ํฉ์ ๋ณ๊ฒฝ
์ปจํ
์ด๋:
BeaconBlockBody ๊ตฌ์กฐ ๋ณ๊ฒฝ
๋ธ๋ก ์ฒ๋ฆฌ:
verify_kzg_commitments_against_transactions ์ ์ถ๊ฐ๋จ process_block
๋คํธ์ํน ๋ณ๊ฒฝ ์ฌํญ
์ปจํ
์ด๋:
์ถ๊ฐ BlobsSidecar๋ฐSignedBlobsSidecar
๊ฐ์ญ ๋๋ฉ์ธ:
์์ beacon_block
์ ์ฒด์ kzg ์ฝ์ ์ด ์์ถ๋ BLS G1 ํฌ์ธํธ(๊ฑฐ๋ถ)๋ก ์ธ์ฝ๋ฉ๋์๋์ง ํ์ธ
๋ณธ๋ฌธ์ kzg ์ฝ์ ์ด tx ๋ชฉ๋ก์ ๋ฒ์ ์ด ์ง์ ๋ ํด์์ ์ผ์นํ๋์ง ํ์ธ(๊ฑฐ๋ถ)
์ถ๊ฐํ๋คblobs_sidecar
์ฌ์ด๋์นด ์ฌ๋กฏ์ด ๊ฒฝ๊ณ ๋ด์ ์๋์ง ํ์ธ(๋ฌด์)
์ฌ์ด๋์นด Blob์ด FE ๋ฒ์ ๋ด์ ์๋์ง ํ์ธ(๊ฑฐ๋ถ)
KZG ์ฆ๋ช
์ด ์์ถ๋ BLS G1 ํฌ์ธํธ๋ก ์ธ์ฝ๋ฉ๋์๋์ง ํ์ธ(๊ฑฐ๋ถ)
์ฌ์ด๋์นด ์๋ช
ํ์ธ(๊ฑฐ๋ถ)
์ฌ์ด๋์นด ์ ์์๊ฐ ์ฌ๋ฐ๋ฅธ ์ฌ๋กฏ์ ์๋์ง ํ์ธ(๊ฑฐ๋ถ)
์ด๊ฒ์ด ์ฃผ์ด์ง ์ ์์ ์ธ๋ฑ์ค ๋ฐ ์ฌ๋กฏ ์ฝค๋ณด์ ๋ํ ์ฒซ ๋ฒ์งธ ์ฌ์ด๋์นด์ธ์ง ํ์ธํฉ๋๋ค. ์ฌ๊ธฐ์ ์ฝ๊ฐ์ ์ํฐ ๋์ค ์กฐ์น
โ ๏ธ validate_blobs_sidecar๊ฐ์ญ ์ ์ ๊ฒ์ฆ์ ์ผ๋ถ๊ฐ ๋์ด์ผ ํฉ๋๊น? ํ์ฌ ๋ช
์๋ ๋ฐ์ ๊ฐ์ด validate_blobs_sidecarํฌํฌ ์ ํ์๋ง ์ํฅ์ ๋ฏธ์นฉ๋๋ค .
โ ๏ธ ํ์ฌ ๋คํธ์ํฌ ์ฌ์์ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ด๋์นด๋ฅผ ๋ธ๋ก ์์ด ๊ฒ์ฆ ๋ฐ ์ ํํ ์ ์์ต๋๋ค. ์๋ํ ๊ฒ์ ๋๊น?
์์ฒญ/ํด์๋ ๋๋ฉ์ธ:
์์ /eth2/beacon_chain/req/beacon_blocks_by_range/2/
์์ /eth2/beacon_chain/req/beacon_blocks_by_root/2/
์ถ๊ฐBlobsSidecarsByRange v1
์์ฒญ: start_slot: Slot,count: uint64
์๋ต:List[BlobsSidecar, MAX_REQUEST_BLOBS_SIDECARS]
์๋ต์ ํ์ฌ ํค๋๋ก ์ด์ด์ง๋ ๋ด์ฉ์ ์ํด ๊ฒฐ์ ๋ฉ๋๋ค.
โ ๏ธ์์ผ๋ ์ฐธ๊ณ ํ์ธ์ BlobsSidecarsByRootv1. ๋ด ์ฒซ์ธ์์ ์ด๊ฒ์ด ์์ผ๋ฉด ์ ์ฉํ๋ค๋ ๊ฒ์
๋๋ค. ๊ฐ์ญ์์ ์ฌ์ด๋์นด๋ฅผ ๋ฐ์ง ๋ชปํ๋ค๋ฉด ์ต์ํ ๋นจ๋ฆฌ ๊ฒ์ํ ์ ์์ต๋๋ค.
โ ๏ธ MAX_REQUEST_BLOBS_SIDECARS๋ 128์ ๋๋ค. ์ฌ์ด๋์นด์ ๋์ ํฌ๊ธฐ๋ ~1MB์ด๊ณ ์ต๋๊ฐ์ ~2MB์ ๋๋ค. ์ด๊ฒ์ด ์ ๋์ญํญ ์ฅ์น์ ์ด๋ค ์ํฅ์ ์ค๋๊น?
4844 ๋์ ๋คํธ์ํน ๊ณ์ธต์ s ๋ฐ s ๊ฒฐํฉ์ ๋ํ ๋ช ๊ฐ์ง ์ถ๊ฐ ์ฐธ๊ณ ์ฌํญ .BeaconBlockBlob
๊ฒ์ฆ์ธ ๋ณ๊ฒฝ
Validator signed_blobs_sidecar๋ ์ถ๊ฐ๋ก ์ ์ํฉ๋๋ค signed_beacon_block. ์ ํจ์ฑ ๊ฒ์ฌ๊ธฐ๋ get_blobs_and_kzg_commitments์
๋ ฅ์ดpayload_id
โ ๏ธ ์ด์์ ์ผ๋ก๋ ํตํฉ๋์ด์ผ ํฉ๋๋ค get_blobs_and_kzg_commitments. get_payloadํ๋์ ์์ฒญ์ผ๋ก ์ผ๋ฃฉ๊ณผ ํ์ด๋ก๋๋ฅผ ๊ฒ์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ ํจ์ฑ ๊ฒ์ฌ๊ธฐ๋ ํ์ด๋ก๋ ํธ๋์ญ์ ์ ์ ํจ์ฑ์ ๊ฒ์ฌํ๊ณ blob ๋ฐ kzg ์ฝ์ ์ด ๋ชจ๋ ์ ๋ ฌ๋ ๋ค์ blobs_sidecar์๋ช ์ ์ํด ๊ตฌ์ฑํฉ๋๋ค. ์ง๊ณ๋ ๋คํญ์(blobs)์ ๊ณ์ฐํ๊ณ kzg ์ฆ๋ช ์ ์ํด ์ด๋ฅผ bls ํ๋์ ํด์ํ๋ ํ๋๊ฐ ์์ต๋๋ค blobs_sidecar.kzg_aggregated_proof
โ ๏ธ ์์ฆ์ ์๊ฐ์ด ์ผ๋ง๋ ๊ฑธ๋ฆฌ๋์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง ์ข์ ์ต์ ํ ๋ชฉํ๋ผ๊ณ ์๊ฐํฉ๋๋ค.compute_proof_from_blobs
Blob ๋ฐฑํ ์๊ตฌ ์ฌํญ
์ ์ ์ฌํ๊ฒ SignedBeaconBlockํด๋ผ์ด์ธํธ๋ ๋ธ๋ก์ ์ต๋ current_epoch – MIN_EPOCHS_FOR_BLOCK_REQUESTS.
์ฒดํฌํฌ์ธํธ ๋๊ธฐํ์์ ์์ํ๋ CL ํด๋ผ์ด์ธํธ๋ ๋ค์๊น์ง ๋ฐฑ์
BlobsSidecarํด์ผ ํฉ๋๋ค.current_epoch – MIN_EPOCHS_FOR_BLOBS_SIDECARS_REQUESTS
โ ๏ธ CL ํด๋ผ์ด์ธํธ๋ ๋ฐฑํ์ ๋ํด ์ด๋ค ์ข ๋ฅ์ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ํํด์ผ BlobsSidecarํฉ๋๊น? ๊ฐ ์๋๋ฏ๋ก ์๋ช ์ ํ์ธํ ์ ์์ต๋๋ค SignedBlobsSidecar. ์ต์ํ ์ํํ ์ validate_blobs_sidecar์์ต๋๊น? DB์ ๋น์ฝ ๋ธ๋ก๊ณผ ๊ต์ฐจ ํ์ธํฉ๋๊น? (์ด ์์ญ์ ์ฌ์์์ ์ ์๋์ง ์์)
๋ฐ๋ ์ธ์ SignedBlobsSidecarsByRange๋ ๋ ธ๋๊ฐ ๋น์ฝ ๋ธ๋ก์ ๊ฐ๊ธฐ ์ ์ ์ญ์ฌ์ ์ผ๋ก ๋ธ๋กญ์ ๋ค์ด๋ก๋ํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ด์จ๋ ๋ธ๋ก์ ์ป์ ๋๊น์ง ๋๊ธฐํ ์ค์ธ ์ญ์ฌ์ ๋ธ๋กญ์ ๋ํ ์ ์์๋ฅผ ์ ํ์๊ฐ ์์ ์๋ ์์ต๋๋ค.
๊ธฐ๋ก ๋๊ธฐํ๋ฅผ ์ํด ๋ค์ ์ธ ๊ฐ์ง ์์ ์ ์ํํ ์ ์์ต๋๋ค.
kzg ์ฆ๋ช
ํ์ธ
์ ์์ ์๋ช
ํ์ธ
Blob์ด ํ์ค ์ฒด์ธ์ ์ผ๋ถ์ธ์ง ํ์ธ
1์ ํ์๋ผ๊ณ ์๊ฐํฉ๋๋ค. 2์ 3์ ๊ฐ์ ๊ฐ์ฒด ์๋์์ ๋ธ๋กญ๊ณผ ๋ธ๋ก์ ๊ฒฐํฉํ๋ ๊ฒฝ์ฐ์๋ง ์๋ฏธ๊ฐ ์์ต๋๋ค.
๋๊ธฐํ์๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์๋ฐฉํฅ ๋๊ธฐํ ๋ฐ ์ญ๋ฐฉํฅ ๋๊ธฐํ w/ws ์ํ. ์ญ๋ฐฉํฅ ๋๊ธฐํ์ ๊ฒฝ์ฐ Blob์๋ parent_root ํ๋๊ฐ ์๊ณ ์ฒด์ธ์ด ์๋๋ฏ๋ก ์ค์ ๋ก ๊ฐ๋ณ ๋จ์๋ก ํ๋์ฉ ์ ํจ์ฑ์ ๊ฒ์ฌํด์ผ ํฉ๋๋ค.
โฆ
์คํ ๋ฆฌ์ง ์๊ตฌ ์ฌํญ
๋น์ฝ ํด๋ผ์ด์ธํธ๋ SignedSideCar์ต๋ MIN_EPOCHS_FOR_BLOBS_SIDECARS_REQUESTS. Nํด๋ผ์ด์ธํธ๋ ์ํฌํฌ ๊ธฐ์ค์ผ๋ก ์ผ๋ถ ๋กค๋ง ์ฐฝ ์ ๋ฆฌ ๋ฉ์ปค๋์ฆ์ ๊ตฌํํ ๊ฒ ์
๋๋ค.
์ถ๊ฐ ์ ์ฅ ์๊ตฌ ์ฌํญ์ ๊ดํด์. ์ต์
์ ๊ฒฝ์ฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. MIN_EPOCHS_FOR_BLOBS_SIDECARS_REQUESTS* SLOTS_IN_EPOCH* 2MB๋ ~525GB์
๋๋ค .
1MB/2MB(๋ชฉํ/์ต๋)์ ๊ฒฝ์ ์ฑ์ ์ฅ๊ธฐ์ ์ผ๋ก ํ๊ท 1MB๊ฐ ๋๋ค๋ ์ ์ ๋ช ์ฌํด์ผ ํฉ๋๋ค. ํ์ฌ ๋คํธ์ํน์์ 1MB/2MB๊ฐ ํ์ค์ ์ธ์ง ์ฌ๋ถ๋ ๋๊ณ ๋ด์ผ ํฉ๋๋ค. ๊ฐ๋ฅํ ํธ๋ ์ด๋ ์คํ๋ ๋คํธ์ํฌ ๋ณต์ก์ฑ์ ์ฆ๊ฐ์ํค๊ฑฐ๋ ๊ฐ์ ๋ฎ์ถ๋ ๊ฒ์ ๋๋ค. ๋ง์ง๋ง์ผ๋ก 4์ฃผ( MIN_EPOCHS_FOR_BLOBS_SIDECARS_REQUESTS)์ ์ํ์ ์ 2์ฃผ๋ก ๋ฎ์ถ ์ ์์ต๋๋ค. ์ต์ ์ ๊ฒฝ์ฐ ๊ณ์ฐ ~ 525GB๋ ํจ์ฌ ๋ฎ์ ๊ฒ์ ๋๋ค.
MIN_EPOCHS_FOR_BLOBS_SIDECARS_REQUESTSโ ๏ธ ์ดํ์ ๋ ธ๋๊ฐ ๋ ๊ธด ๊ธฐ๊ฐ ๋์ ์ผ๋ฃฉ์ ์ ์ฅํ ์ ์๋๋ก ์น์๋ฅผ ํ์ฑํํ๊ธฐ ์ํด CLI ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ๋์์ด ๋๋์ง ๊ถ๊ธํฉ๋๋ค . ๋จ์ ์ ์ด๋ฌํ ๋์์ธ์ด ๋งค์ฐ ๋ฎ์ ์ซ์ ๋ก ํ๋์ฝ๋ฉํ๋ ์ฌ๋์ด ๋จ์ฉํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค .MIN_EPOCHS_FOR_BLOBS_SIDECARS_REQUESTS
๋คํธ์ํน ์๊ตฌ ์ฌํญ
ํ์ฌ ๊ฐ์ญ ์ฑ๋ฅ ๋ฐ ๋
ธ๋ ๋์ญํญ ๊ณ ๋ ค ์ฌํญ์ ๊ณ ๋ คํ ๋ Blob์ ์์ ํ ํฌ๊ธฐ(๋์ ๋ฐ ์ต๋๊ฐ)๊ฐ 4844์ธ์ง ํ์คํ์ง ์์ต๋๋ค.
ํ๋ด ์ฌ์ด๋์นด ๋ฐ ์์ฒญ-์๋ต ์ฌ์ด๋์นด์ ํ์ํ ์ถ๊ฐ ๋์ญํญ์ด ์์ต๋๋ค. ํ์ฌ ๊ฒ์๋ ๊ถ์ฅ ์ฌํญ์ ์ต์ 10Mb/s ๋์นญ ๋ฐ “๊ถ์ฅ” 25Mb/s์ ๋๋ค: https://ethereum.org/en/developers/docs/nodes-and-clients/ . ์ด ๋ฒ์์ ๋ ธ๋ ๋คํธ์ํฌ๋ฅผ ๊ฐ์ ํ ๋ ํ์ฌ ๋น์ฝ ์ฒด์ธ ์ฌ๋กฏ ๊ตฌ์กฐ๊ฐ ์ฃผ์ด์ง๋ฉด ๋คํธ์ํฌ๊ฐ ์ฒ๋ฆฌํ ์ ์๋ ์์ ํ Blob ํฌ๊ธฐ๋ ์ผ๋ง์ ๋๊น(4์ด ์ด์ ์ ๊ด๋ฒ์ํ ๋ณด๊ธ ํ์).
์ด ๊ฐ์ ์กฐ์ ํ๊ธฐ ์ํด ์ํํด์ผ ํ๋ ํ๊ณผ ์ข ์ด ๋ฐ/๋๋ ์คํ์ ๋ถ์์ด ์์ต๋๊น?
๋์ญํญ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
์ฆํญ ์ธ์ ๊ฐ์
์ต๋ ์ผ๋ฃฉ ํฌ๊ธฐ ์ค์ด๊ธฐ
Blob ํธ์ vs ํ
๋ธ๋กญ ์ฌ์ด๋์นด๋ฅผ ์ ํ ์ฃผ์
๋ก ์ค์ ๊ฐ์ญ ์ฆํญ ์์ธ์ ์ดํด๋ณด๊ณ ๋์ญํญ ์ธก์ ์์คํ
์ ๊ธฐ๋ฐ์ผ๋ก ์ฆํญ์ ์กฐ์ ํ ์ ์์ต๋๋ค. Go libp2p๋ ์ถ์ ํ ํผ์ด ๊ธฐ์ค์ผ๋ก ๋ฆฌ์์ค ์ธก์ ์์คํ
์ ์ง์ํฉ๋๋ค. ์๋ ์ ํ์ ์์ฉ ํ๋ก๊ทธ๋จ ๊ณ์ธต(req/res ์ ํ) ๋ฐ gossipsub์์ ๋ฐ์ํ ์ ์์ต๋๋ค.
์ฌ์ด๋์นด ์์ด ์ฐจ๋จ == ๋๊ด์ ์ฐจ๋จ?
์ฌ์ด๋์นด ์ปดํจ๋์ธ์ด ์๋ ๋ธ๋ก์ ์ ํจํ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋์ง ์์ง๋ง ์ฒ๋ฆฌํด๋ ๋ฉ๋๋ค. ์๊ตฌ ์ฌํญ์ ์ฐธ์กฐํ์ญ์์ค is_data_available. ์ฌ์์ ๋ช
์๋ ๋๋ก ๋ธ๋ก์ “๋๊ด์ ์ผ๋ก” ์ฒ๋ฆฌ๋ ์ ์์ต๋๋ค.
โ ๏ธ SYNCING/ ACCEPTEDํ์ด๋ก๋๊ฐ ์๋ ๋ธ๋ก๊ณผ ์ฌ์ด๋์นด๊ฐ ์๋ ๋ธ๋ก ์ฌ์ด์ ์ด๋ค ํํ์ ์ ๊ทธ๋ฆด ์ ์์ต๋๊น? ํ์ฌ Prysm ๋์์ธ์ ์ฌ์ด๋์นด๊ฐ ์๋ ๋ธ๋ก์ ํค๋๋ก ๊ฐ์ฃผํ์ง ์์ต๋๋ค. ์ด๋ด์filter_block_tree
if correct_justified and correct_finalized and is_data_available:
blocks[block_root] = block
return True
EL์ด ๋ณด๊ณ ํ๋ฉด ๊ทธ๋ฌํ ๋ธ๋ก์ ๊ฒ์ฆํ๋ ๊ฒ์ด ์ ์ ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค INVALID. ๊ทธ๋ฐ VALID๋ค์ ๋
ธ๋๊ฐ ์ฆ์ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ ๊ฐ๊ฐ์ ์ผ๋ฃฉ์ ์ฐพ์ต๋๋ค. ์ฌ์ด๋์นด๊ฐ ์๋ ๋ธ๋ก์ ์๋ฏธ๊ฐ ์์ต๋๋ค. ๋๊ด์ ๋ชจ๋๊ฐ ์กด์ฌํ๋ ์ด์ ๋ ๋
ธ๋๊ฐ ๋๊ธฐํ/๋ณต๊ตฌ๋ฅผ ์๋ํ๊ธฐ ์ํด EL ํด๋ผ์ด์ธํธ ํค๋๋ฅผ ๊ณ์ ๋ณด๋ผ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ์ด ๊ฒฝ์ฐ EL ํด๋ผ์ด์ธํธ๋ ๋๊ธฐํ๋์ง ์์ผ๋ฏ๋ก ๋๊ด์ ์ธ ๊ฒ์ ๋ถ๊ฐ๊ฐ์น๊ฐ ๋ง์ง ์์ต๋๋ค.
KZG ์ํ ํํฉ
๊ตฌํ ์ ๋ฐ์ ๊ฑธ์ณ ์ฌ์ฉํ ์ต์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฒฐ์ ํด์ผ ํฉ๋๋ค. ๋ชจ๋ CL ํ์์ ๋จ์ผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์ผ๋ก ์ด๋ฅผ ์๋ ดํ๋ ๊ฒ์ด ์ข์ ๊ฒ์
๋๋ค.
์ ๋ George๊ฐ Supranational ํ๊ณผ ์ด์ผ๊ธฐํ๊ณ ์์ฒญ๋ ๊ธฐ๋ฅ ๋ชฉ๋ก์ ์ ๊ณตํ๋ค๊ณ ์๊ฐํฉ๋๋ค. Discord ๋ฅผ ๊ธฐ๋ฐ ์ผ๋ก ํ๋ฉด ์ด๊ฒ์ด go
- compute_powers()
kzg matrix_lincomb()
๋ฅผ ์์ ํ ๋์ฒดํ ์ ์๋๋ก blst ๊ฐ ๋ ธ์ถํ ๊ฒ์ผ๋ก ์์๋๋ KZG/๋คํญ์ ํจ์์ ๋ชฉ๋ก์ด๋ผ๊ณ ์๊ฐ ํฉ๋๋ค . ์ฑ๋ฅ์ ๋ฏผ๊ฐํ ๊ธฐ๋ฅ์ ์ํด ๋ง๋ค์ด์ง ์์ธ๋ฅผ ์ ์ธํ๊ณ blst๊ฐ ์ ๊ณตํ๋ ๋ชจ๋ ๊ธฐ๋ณธ ๊ธฐ๋ฅ. BLST์๋ ์ด๋ฏธ ํ๋ ์์์์ ์๋ํ๋ ๊ธฐ๋ฅ์ด ํฌํจ๋์ด ์์ต๋๋ค. ๋ฐ๋ผ์ ์ง๊ธ ๋น์ฅ BLST๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์์์ ์ฑ๋ฅ์ ์ค์ํ์ง ์์ ๊ธฐ๋ฅ์ ๋ง์ด ๊ตฌํํ ์ ์์ต๋๋ค.g1_lincomb()
bytes_to_bls_field()
evaluate_polynomial_in_evaluation_form()
verify_kzg_proof()
compute_kzg_proof()
BLST์์ ์ง์ํ์ง ์๋ ๋๋ฝ๋ ๊ธฐ๋ฅ์ ์ฑ์ฐ๋ Dankrad์ Ben์ด ์์ ์ค์ธ c-kzg ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ ์์ต๋๋ค . c-kzg๋ Supranational์ด KZG ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๋ฐ ๋๋ฌด ์ค๋ ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ ๋จ๊ธฐ์ ์ผ๋ก ์ ์ฉํ ์ ์์ต๋๋ค.
ํ์ฌ devnet ๋ฐ Prysm ํ๋กํ ํ์
์ BLS ์ฌ์ ์ปดํ์ผ์ ์ง์ํ๊ธฐ ์ํด ์ด์ ์ Geth๊ฐ ๋ถ๊ธฐํ Kilic-BLS ์์ ๋ํ๋๋ Go-KZG ์ ํ์ ์ฌ์ฉํฉ๋๋ค. ์ด๊ฒ์ CL ํด๋ผ์ด์ธํธ์์ ์ฌ์ฉ๋์ง ์์ต๋๋ค.
Go-KZG์๋ ๋ค๋ฅธ BLS ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ต์
์ด ์์ต๋๋ค. BLST๋ฅผ ์๋ํ์ง๋ง ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๊ฐ ๋ถ์กฑํ์ฌ ์ด๋ ค์ ์ต๋๋ค. CGO ์ ํ์ Go ์ ํ์ผ๋ก ๋ํํ๋ ๊ฒ์ ์ด๋ ต์ต๋๋ค.
ํ์ฌ BLST๋ ์ผ๋ถ ์์
์๊ตฌ ์ฌํญ์ ๋
ธ์ถํ์ง๋ง ๋ชจ๋ ์์
์ด
Supranational์ ์๋์ง๋ง ํ์ฌ ํ์ด๋ง์ ์ํ ์ธํฐํ์ด์ค๊ฐ ๋งค์ฐ ๋ฒ๊ฑฐ๋กญ๊ณ ๋ฌธ์๋ฅผ ๊ฐ์ ํ ๊ฒ์ด๋ผ๋ ๋ฐ ๋์ํ์ต๋๋ค.
๋ฒ์ญ๋ณธ ์๋ฌธ ์์ฑ์: @terencechain