decryption - [testnet]
此内容尚不支持你的语言。
This module provides a decryption key unique to every block. This resource is updated in every block prologue. The decryption key is the key used to decrypt the encrypted transactions in the block.
use 0x1::config_buffer;use 0x1::option;use 0x1::system_addresses;Resources
PerBlockDecryptionKey
Decryption key unique to every block. This resource is updated in every block prologue.
struct PerBlockDecryptionKey has drop, keyFields
-
epoch: u64 -
round: u64 -
decryption_key: option::Option<vector<u8>>
PerEpochEncryptionKey
Encryption key derived from the DKG result, valid for one epoch.
struct PerEpochEncryptionKey has drop, store, keyFields
-
epoch: u64 -
encryption_key: option::Option<vector<u8>>
Functions
initialize
Called during genesis initialization.
public fun initialize(framework: &signer)Implementation
public fun initialize(framework: &signer) { system_addresses::assert_aptos_framework(framework); if (!exists<PerBlockDecryptionKey>(@aptos_framework)) { move_to( framework, PerBlockDecryptionKey { epoch: 0, round: 0, decryption_key: option::none() } ); }; if (!exists<PerEpochEncryptionKey>(@aptos_framework)) { move_to( framework, PerEpochEncryptionKey { epoch: 0, encryption_key: option::none() } ); }}on_new_block
Invoked in block prologues to update the block decryption key.
public(friend) fun on_new_block(vm: &signer, epoch: u64, round: u64, decryption_key_for_new_block: option::Option<vector<u8>>)Implementation
public(friend) fun on_new_block( vm: &signer, epoch: u64, round: u64, decryption_key_for_new_block: Option<vector<u8>>) acquires PerBlockDecryptionKey { system_addresses::assert_vm(vm); if (exists<PerBlockDecryptionKey>(@aptos_framework)) { let decryption_key = borrow_global_mut<PerBlockDecryptionKey>(@aptos_framework); decryption_key.epoch = epoch; decryption_key.round = round; decryption_key.decryption_key = decryption_key_for_new_block; }}set_for_next_epoch
Buffer the encryption key for the next epoch.
public(friend) fun set_for_next_epoch(epoch: u64, encryption_key: vector<u8>)Implementation
public(friend) fun set_for_next_epoch(epoch: u64, encryption_key: vector<u8>) { config_buffer::upsert(PerEpochEncryptionKey { epoch, encryption_key: option::some(encryption_key) });}on_new_epoch
Apply buffered PerEpochEncryptionKey on epoch transition.
public(friend) fun on_new_epoch(framework: &signer)Implementation
public(friend) fun on_new_epoch(framework: &signer) acquires PerEpochEncryptionKey { system_addresses::assert_aptos_framework(framework); if (config_buffer::does_exist<PerEpochEncryptionKey>()) { let new_key = config_buffer::extract_v2<PerEpochEncryptionKey>(); if (exists<PerEpochEncryptionKey>(@aptos_framework)) { *borrow_global_mut<PerEpochEncryptionKey>(@aptos_framework) = new_key; } else { move_to(framework, new_key); } }}