Since Bifrost DOT LST (vDOT) is staked by three Sovereign derived addresses, remotely controlled by the Bifrost runtime pallet. As such, the Bifrost Sovereign address will be the receiver address of $DED and distribute accordingly to vDOT holders . The vDOT snapshot will be done in sync with the DED snapshot and will be distributed by the Bifrost Sovereign address.
Bifrost Sovereign address: 13YMK2eeopZtUNpeHnJ1Ws2HqMQG6Ts9PGCZYGyFbSYoZfcm
These addresses are keyless derived addresses generated by the Bifrost Sovereign Address through calculation, used for DOT Staking behind vDOT. The calculation method can be found at: https://github.com/bifrost-finance/bifrost/blob/d21077ad1c2376076702de5c4d4e1466024b6f12/runtime/bifrost-polkadot/src/lib.rs#L1031
Below is the code to verify that derivative addresses are calculated from the Bifrost sovereign address:
#[test]
fn generate_derivative_account() {
Polkadot::execute_with(|| {
// PublicKey: 0x70617261ee070000000000000000000000000000000000000000000000000000
// AccountId(42): eGJryu57ZpFQjFRiya9nGcqiGG2RZeGWuXMENq4Na7jFNjs
let sovereign_account = <ParaId as AccountIdConversion<AccountId>>::into_account_truncating(&ParaId::from(
2030
));
// PublicKey: 0xadcea185416af2d3e8df8c1c8ee8a634bf1c3275b3820cb6d935300d42c73b2a
// AccountId(42): 5FzbXK46dYRXsTaXuUb3uJ1QCNBRf3KV8Tpue2Ec6iAj8nxL
let sovereign_account_derivative_0 = polkadot_runtime::Utility::derivative_account_id(sovereign_account.clone(), 0);
assert_eq!(
sovereign_account_derivative_0,
AccountId::from_ss58check(“5FzbXK46dYRXsTaXuUb3uJ1QCNBRf3KV8Tpue2Ec6iAj8nxL”).unwrap()
);
// PublicKey: 0x96d16ffaae52a6a195b6d9f0b365677aedb77675f423813112c5ef5434523622
// AccountId(42): 5FUTFngRdSAPG4BVXCEs7nV6dAsMk8MV4ZU3CDGvx66nXHnR
let sovereign_account_derivative_1 = polkadot_runtime::Utility::derivative_account_id(sovereign_account.clone(), 1);
assert_eq!(
sovereign_account_derivative_1,
AccountId::from_ss58check(“5FUTFngRdSAPG4BVXCEs7nV6dAsMk8MV4ZU3CDGvx66nXHnR”).unwrap()
);
// PublicKey: 0x773d6cf20cfdcbb74194ec6afca483facb3751bfb8933163f2e184f2b1424fb
// AccountId(42): 5Em3oWMRS4UErpb3jn6LkWoYxLmowaKa2q5e51b9UteDsFqS
let sovereign_account_derivative_2 = polkadot_runtime::Utility::derivative_account_id(sovereign_account.clone(), 2);
assert_eq!(
sovereign_account_derivative_2,
AccountId::from_ss58check(“5Em3oWMRS4UErpb3jn6LkWoYxLmowaKa2q5e51b9UteDsFqS”).unwrap()
);
})
}