Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions fendermint/app/options/src/genesis.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ pub enum GenesisCommands {
AddMultisig(GenesisAddMultisigArgs),
/// Add a validator to the genesis file.
AddValidator(GenesisAddValidatorArgs),
/// Set the chain id explicitly
SetChainId(GenesisSetChainIdArgs),
/// Set the EAM actor permission mode.
SetEamPermissions(GenesisSetEAMPermissionsArgs),
/// IPC commands.
Expand Down Expand Up @@ -131,6 +133,13 @@ pub struct GenesisAddValidatorArgs {
pub power: TokenAmount,
}

#[derive(Args, Debug)]
pub struct GenesisSetChainIdArgs {
/// The chain id of the blockchain
#[arg(long, short)]
pub chain_id: u64,
}

#[derive(Args, Debug)]
pub struct GenesisIntoTendermintArgs {
/// The initial app bytes path for cometbft
Expand Down
20 changes: 17 additions & 3 deletions fendermint/app/src/cmd/genesis.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use ipc_provider::IpcProvider;
use std::path::PathBuf;

use fendermint_vm_actor_interface::eam::EthAddress;
use fendermint_vm_core::{chainid, Timestamp};
use fendermint_vm_core::Timestamp;
use fendermint_vm_genesis::{
ipc, Account, Actor, ActorMeta, Collateral, Genesis, Multisig, PermissionMode, SignerAddr,
Validator, ValidatorKey,
Expand All @@ -30,6 +30,7 @@ cmd! {
GenesisCommands::AddAccount(args) => args.exec(genesis_file).await,
GenesisCommands::AddMultisig(args) => args.exec(genesis_file).await,
GenesisCommands::AddValidator(args) => args.exec(genesis_file).await,
GenesisCommands::SetChainId(args) => args.exec(genesis_file).await,
GenesisCommands::IntoTendermint(args) => args.exec(genesis_file).await,
GenesisCommands::SetEamPermissions(args) => args.exec(genesis_file).await,
GenesisCommands::Ipc { command } => command.exec(genesis_file).await,
Expand All @@ -42,6 +43,7 @@ cmd! {
let genesis = Genesis {
timestamp: Timestamp(self.timestamp),
chain_name: self.chain_name.clone(),
chain_id: None,
network_version: self.network_version,
base_fee: self.base_fee.clone(),
power_scale: self.power_scale,
Expand Down Expand Up @@ -75,6 +77,11 @@ cmd! {
add_validator(&genesis_file, self)
}
}
cmd! {
GenesisSetChainIdArgs(self, genesis_file: PathBuf) {
set_chain_id(&genesis_file, self)
}
}

cmd! {
GenesisIntoTendermintArgs(self, genesis_file: PathBuf) {
Expand All @@ -101,6 +108,13 @@ cmd! {
}
}

fn set_chain_id(genesis_file: &PathBuf, args: &GenesisSetChainIdArgs) -> anyhow::Result<()> {
update_genesis(genesis_file, |mut genesis| {
genesis.chain_id = Some(args.chain_id);
Ok(genesis)
})
}

fn add_account(genesis_file: &PathBuf, args: &GenesisAddAccountArgs) -> anyhow::Result<()> {
update_genesis(genesis_file, |mut genesis| {
let pk = read_public_key(&args.public_key)?;
Expand Down Expand Up @@ -223,8 +237,7 @@ fn into_tendermint(genesis_file: &PathBuf, args: &GenesisIntoTendermintArgs) ->
_ => None,
};

let chain_id: u64 = chainid::from_str_hashed(&genesis.chain_name)?.into();
let chain_id = chain_id.to_string();
let chain_id = u64::from(genesis.chain_id()?).to_string();

let tmg = tendermint::Genesis {
genesis_time: tendermint::time::Time::from_unix_timestamp(genesis.timestamp.as_secs(), 0)?,
Expand Down Expand Up @@ -352,6 +365,7 @@ async fn new_genesis_from_parent(
accounts: Vec::new(),
eam_permission_mode: PermissionMode::Unrestricted,
ipc: Some(ipc_params),
chain_id: None,
};

for v in genesis_info.validators {
Expand Down
1 change: 1 addition & 0 deletions fendermint/testing/contract-test/tests/gas_market.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ async fn tester_with_upgrader(

let genesis = Genesis {
chain_name: CHAIN_NAME.to_string(),
chain_id: None,
timestamp: Timestamp(0),
network_version: NetworkVersion::V21,
base_fee: TokenAmount::zero(),
Expand Down
1 change: 1 addition & 0 deletions fendermint/testing/contract-test/tests/run_upgrades.rs
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,7 @@ async fn test_applying_upgrades() {

let genesis = Genesis {
chain_name: CHAIN_NAME.to_string(),
chain_id: None,
timestamp: Timestamp(0),
network_version: NetworkVersion::V21,
base_fee: TokenAmount::zero(),
Expand Down
2 changes: 2 additions & 0 deletions fendermint/testing/contract-test/tests/staking/state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -578,6 +578,7 @@ impl arbitrary::Arbitrary<'_> for StakingState {

let parent_genesis = Genesis {
chain_name: String::arbitrary(u)?,
chain_id: None,
timestamp: Timestamp(u64::arbitrary(u)?),
network_version: NetworkVersion::V21,
base_fee: ArbTokenAmount::arbitrary(u)?.0,
Expand All @@ -599,6 +600,7 @@ impl arbitrary::Arbitrary<'_> for StakingState {

let child_genesis = Genesis {
chain_name: String::arbitrary(u)?,
chain_id: None,
timestamp: Timestamp(u64::arbitrary(u)?),
network_version: NetworkVersion::V21,
base_fee: ArbTokenAmount::arbitrary(u)?.0,
Expand Down
1 change: 1 addition & 0 deletions fendermint/testing/materializer/src/docker/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -666,6 +666,7 @@ impl Materializer<DockerMaterials> for DockerMaterializer {
// TODO: Some of these hardcoded values can go into the manifest.
let genesis = Genesis {
chain_name,
chain_id: None,
timestamp: Timestamp::current(),
network_version: NetworkVersion::V21,
base_fee: TokenAmount::zero(),
Expand Down
2 changes: 1 addition & 1 deletion fendermint/vm/genesis/golden/genesis/cbor/genesis.cbor
Original file line number Diff line number Diff line change
@@ -1 +1 @@
a96a636861696e5f6e616d65650276c286206974696d657374616d701bf9db547b18720bf36f6e6574776f726b5f76657273696f6e1568626173655f6665655100d967904a4e524614e9104329bd3fecd46b706f7765725f7363616c65206a76616c696461746f727384a26a7075626c69635f6b6579584104b1b8def38aade0a7f6206e1f153cc2c69166ed0b544e6d4fa4b01373421c6a169f234fef7e43d16760d4fbbf8756aa807c564e2422700e882737121a3dd7741c65706f77657240a26a7075626c69635f6b6579584104e674ae8fccffa25e4803b9df4b1389418dc5b484b2117c1f26f4fe48e47e012f2b54da23f9760f44fc41a459396502ef7c581003f6fda65cfeb00325f616017c65706f77657251006c9eec63e458608283bfe77a0055e9fea26a7075626c69635f6b657958410400c6bbd6ae8887d1ea5b5cb026708e117863d5754c3fe24ca061bb79e29977209292f56d621c07a9c84c166c33c77be8d934c710529a29891ea639bcea0c65cb65706f776572510095fbc354d7299e24e4e0baabc15c1704a26a7075626c69635f6b65795841044e392cee6f6e834e47c0267bacd13f8ec946d246597b9710502ab8326e6c82c854a588573629ed80cc191b1856530ec6a3794e160564a106a3acf7f4c6fe417465706f77657251000fda8290957a31d30368472a828ac9db686163636f756e747384a2646d657461a1674163636f756e74a1656f776e657255019f377c179cb5fa17d06f062083f2936de5819fbd6762616c616e63655100bd07b3aef354948578c473b98374e130a2646d657461a1674163636f756e74a1656f776e65725501ff3c79ae8c9b302b5592869ef4c02fd0000bff226762616c616e63655100ffffffffffffffff0086db9c18c4d18fa2646d657461a1674163636f756e74a1656f776e657255011ec252b4d088c10c8d18decd8e259ded6178adb66762616c616e6365510096892c6d5730e0b0af06ba4508504aa7a2646d657461a1674163636f756e74a1656f776e657256040ab9f385d65e2507dbf872d5b18e2724d4567806346762616c616e6365510042662ed939482ec79b3a659f335b2add7365616d5f7065726d697373696f6e5f6d6f6465a1646d6f64656c756e7265737472696374656463697063a16767617465776179a4697375626e65745f6964821b6549ea85c5442b9c8256040a01c46872a9f6a041ac1fe7bfe3cb8734001124274b00f8f8b7c4dba5d28bc80176626f74746f6d5f75705f636865636b5f706572696f641b36652e94d8f39a6c736d616a6f726974795f70657263656e746167651856776163746976655f76616c696461746f72735f6c696d697401
a96a636861696e5f6e616d6564743ac28168636861696e5f6964f66974696d657374616d701bbd4bf11f3a3849796f6e6574776f726b5f76657273696f6e1568626173655f66656550008612376b9da7aa551de3a65744c0ae6b706f7765725f7363616c65036a76616c696461746f727389a26a7075626c69635f6b657958410476372d7d4864b6a0d2b3b06ed50085fac2fe88802bb2e8c48d8f704b4d50f4a38f4031db16cba18c6e204650ad35bcb1901c5519c1df352b3d104db7dea6d13c65706f77657251006ba0ad059ab57fdbe575ca38d14f9de4a26a7075626c69635f6b657958410489ad9f13e241927676b2b3595bbd20ae37d93d6a43a985fa8e4b33b4b6459ea828c88aedc6a7b4cfb5150a4d3f39c56e8b6177dfcef3f94884e1ae63df27ea0665706f776572510015ec278d30b626b6e356eaac0be2b75fa26a7075626c69635f6b657958410418c8c5ae11fe99f85a69c76faad1a6759a2005ae6f0e2b7753f7fca0f4a9925044a6b53e9827d9981044ef4be57b15b266b32a39c4db75d96a582b56c2b25e8765706f7765725100ffffffffffffffffc418bd7481cc8d3aa26a7075626c69635f6b6579584104097ac456e37bec3b04ef0e9c9c4a9c98ae35e15f206ed317a44a4a82cabd18ae84e1469138403fd43c702d2cb52d4f2d21c5433f6ec3c7e1ea7c2a91ec63cb0e65706f776572510097cf49b1e4a816a7ca4870ca065150e3a26a7075626c69635f6b65795841040d4f5f56ab9859812a8a266928d72d78096d24b5590ade87e7c205a63bf872818d5f09d75edd110563147553f12c4b82e04cc9a11c60625dd22e9c364c808f5065706f7765725100ffffffffffffffffa5a36f9384821167a26a7075626c69635f6b657958410400aabb0b996e884ff6938d3a0997b174a291b816167367b251493e2650e3338cb555b52ae2f55ba43766ad9f48c56481113df7a8f550465d947dbe4d722918a065706f7765725100b4c6f3f24970c4cb5cd589383abd7c02a26a7075626c69635f6b6579584104ae8021891450d9f66fd2b1d21ceb93f22da3868fd31c42614aeeb1cc711b7dbe19ab2622beff2c936eee912adf600758d2655900ed643c60b0034ef7c1c2cc1f65706f776572510052fa3b310687ee1410acd82d6b8ebd19a26a7075626c69635f6b6579584104a1154af685e5e18f06c1fb417276180df7cb3fecd7e3469e792ce8c699d92cece31b9be7e68ea9975d61376431e4fe613508338afafafcbc9742c79dda42ed2665706f77657251006cfe34ae14adcb58c38f05b2a7cd3e84a26a7075626c69635f6b657958410495cc1694695283392a2cf6156be519e23ec1486361c49f6178e2e3b85f27ddfefb47dda57afb214b9027691c52711b52703e48d7b224c7fc20ea20d52c50e76365706f7765725100b7ade10bdf911763aa16b9da80d5f1e4686163636f756e747385a2646d657461a1674163636f756e74a1656f776e65725501dd383babbd0e2a05f3df7b5010a0742e21829c496762616c616e636551005bcb33ef2629fe92b3d72173d710e2c4a2646d657461a1684d756c7469736967a4677369676e657273825501b75d73950b1663ac6e426e53fc2eef0637b3e5b65501cd0c1c0ed741b0eff1e308f743d39dda72798e29697468726573686f6c64027076657374696e675f6475726174696f6e1be902433266fdaa1e6d76657374696e675f7374617274016762616c616e636551007488e745df44d72010bb870899d580b5a2646d657461a1684d756c7469736967a4677369676e6572738555016bd5fb99a9550ff40f9c942017e556b35fca6b7d550143f40b43c969cd7f6f9caec35684b6d75a832e68550129b3e5a959ab03dbaa9308f32df4d33c8baa969d55011c9742abbeae1eaa0c68f52b1bbeda2e378a0c9f55016af8e18a9426b158c339e29de27bda0a57480e77697468726573686f6c64017076657374696e675f6475726174696f6e1b22b25ee9b9b8630c6d76657374696e675f73746172741b80c5a416503ebb8f6762616c616e636551001cd59e5c05e2a335bb80b9f7ce277b97a2646d657461a1674163636f756e74a1656f776e657256040aa08feb38ec798210bfaa877dcf1367d2570249956762616c616e636551007a7e060487bf1f66d0fd96ad11b372f5a2646d657461a1684d756c7469736967a4677369676e6572738255013b30b7082d3ec93cf8729441d37d06ed61b9292a5501d5dd00369f6308acd1e966d3a5330386517abc82697468726573686f6c64027076657374696e675f6475726174696f6e1bbe76e9869c0e9d4b6d76657374696e675f73746172741ba541e3a797e5cdbc6762616c616e636551009a31b914015bef53473dc9a3d140a7e27365616d5f7065726d697373696f6e5f6d6f6465a1646d6f64656c756e72657374726963746564
2 changes: 1 addition & 1 deletion fendermint/vm/genesis/golden/genesis/cbor/genesis.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
Genesis { chain_name: "\u{2}v\u{86} ", timestamp: Timestamp(18004076823011527667), network_version: NetworkVersion(21), base_fee: TokenAmount(288980208215862077196.62279768840915682), power_scale: -1, validators: [Validator { public_key: ValidatorKey(PublicKey(Affine { x: Field { n: [35416598, 318672, 47512139, 2969913, 43083501, 21967025, 34005489, 58892248, 49515181, 2911799], magnitude: 1, normalized: true }, y: Field { n: [30897180, 29656719, 15237747, 9472448, 8148558, 30780064, 22002680, 54893955, 66027075, 2607315], magnitude: 1, normalized: true }, infinity: false })), power: Collateral(TokenAmount(0.0)) }, Validator { public_key: ValidatorKey(PublicKey(Affine { x: Field { n: [8257839, 20943417, 63042159, 34785349, 26068404, 46457424, 3907060, 42563872, 42978559, 3775787], magnitude: 1, normalized: true }, y: Field { n: [34996604, 51581, 40226795, 1039350, 58480656, 39403707, 1721747, 4002801, 35912054, 709942], magnitude: 1, normalized: true }, infinity: false })), power: Collateral(TokenAmount(144381801011343391211.45386339795297331)) }, Validator { public_key: ValidatorKey(PublicKey(Affine { x: Field { n: [43611936, 7265912, 35965446, 30748927, 24667093, 27009924, 28691202, 35604393, 64401032, 12718], magnitude: 1, normalized: true }, y: Field { n: [34366923, 26111802, 43553258, 4278888, 14234823, 15851258, 12674755, 2008865, 23945756, 2401469], magnitude: 1, normalized: true }, infinity: false })), power: Collateral(TokenAmount(199362199675072659956.03829084385365786)) }, Validator { public_key: ValidatorKey(PublicKey(Affine { x: Field { n: [40665800, 44960923, 24184066, 18441710, 46745298, 53759971, 157626, 34421023, 15626094, 1281611], magnitude: 1, normalized: true }, y: Field { n: [50217332, 54394161, 34630202, 5772690, 44267854, 26526641, 26325381, 62260016, 5715497, 1386850], magnitude: 1, normalized: true }, infinity: false })), power: Collateral(TokenAmount(21072988820299197989.636065309204597211)) }], accounts: [Actor { meta: Account(Account { owner: SignerAddr(Address("f1t43xyf44wx5bpudpayqih4utnxsydh556ydceiy")) }), balance: TokenAmount(251264081693685283431.012990384174588208) }, Actor { meta: Account(Account { owner: SignerAddr(Address("f1746htlumtmycwvmsq2ppjqbp2aaax7zcuieqlqa")) }), balance: TokenAmount(340282366920938463444.965822468414820751) }, Actor { meta: Account(Account { owner: SignerAddr(Address("f1d3bffngqrdaqzdiy33gy4jm55vqxrlnwxqibvry")) }), balance: TokenAmount(200096445126233212412.120803979505453735) }, Actor { meta: Account(Account { owner: SignerAddr(Address("f410fxhzylvs6eud5x6ds2wyy4jze2rlhqbruaxgtf5y")) }), balance: TokenAmount(88259612202455942731.736705225415404253) }], eam_permission_mode: Unrestricted, ipc: Some(IpcParams { gateway: GatewayParams { subnet_id: SubnetID { root: 7298622531391728540, children: [Address("f410fahcgq4vj62qedla74676hs4hgqabcjbh3qr5lrq"), Address("f014418073192768601208")] }, bottom_up_check_period: 3919590267525765740, majority_percentage: 86, active_validators_limit: 1 } }) }
Genesis { chain_name: "t:\u{81}", chain_id: None, timestamp: Timestamp(13640261012844726649), network_version: NetworkVersion(21), base_fee: TokenAmount(696137253270960098.675144670027497646), power_scale: 3, validators: [Validator { public_key: ValidatorKey(PublicKey(Affine { x: Field { n: [22082723, 64754387, 42748120, 33599179, 46333576, 20980094, 54200045, 47874890, 24987748, 1936843], magnitude: 1, normalized: true }, y: Field { n: [44486972, 1273335, 55751633, 6752124, 26221653, 55406380, 33842442, 42348984, 31135435, 2347020], magnitude: 1, normalized: true }, infinity: false })), power: Collateral(TokenAmount(143061672347233926014.329274708775640548)) }, Validator { public_key: ValidatorKey(PublicKey(Affine { x: Field { n: [38117032, 46984493, 6269156, 27856550, 37214525, 49236011, 53163413, 38394330, 51634753, 2255719], magnitude: 1, normalized: true }, y: Field { n: [52947462, 7051511, 60065870, 58670031, 42688887, 63861083, 22062291, 47398612, 49137319, 668194], magnitude: 1, normalized: true }, infinity: false })), power: Collateral(TokenAmount(29139972170318397371.941015021584299871)) }, Validator { public_key: ValidatorKey(PublicKey(Affine { x: Field { n: [11113040, 33499197, 45577535, 45726776, 26877957, 45377949, 43808506, 40362345, 28185086, 406065], magnitude: 1, normalized: true }, y: Field { n: [45244039, 34264496, 56465061, 15143789, 40284970, 22988140, 5174462, 57040961, 20879399, 1124781], magnitude: 1, normalized: true }, infinity: false })), power: Collateral(TokenAmount(340282366920938463459.058115497025113402)) }, Validator { public_key: ValidatorKey(PublicKey(Affine { x: Field { n: [45947054, 43163826, 20019780, 24936891, 11417057, 51554086, 49342921, 61926419, 5694331, 155313], magnitude: 1, normalized: true }, y: Field { n: [6540046, 51029115, 8265383, 16628495, 18990403, 21713867, 50516683, 16732401, 43071552, 2177105], magnitude: 1, normalized: true }, infinity: false })), power: Collateral(TokenAmount(201789727523290626488.516222068370526435)) }, Validator { public_key: ValidatorKey(PublicKey(Affine { x: Field { n: [66613889, 8481166, 32013948, 47539243, 617764, 37079902, 10643090, 23463082, 56011672, 218071], magnitude: 1, normalized: true }, y: Field { n: [8425296, 61279635, 36035874, 42234241, 48254153, 4920032, 21452095, 4461964, 30891741, 2316226], magnitude: 1, normalized: true }, infinity: false })), power: Collateral(TokenAmount(340282366920938463456.863369474894598503)) }, Validator { public_key: ValidatorKey(PublicKey(Affine { x: Field { n: [14889868, 38766996, 41624852, 5790157, 10654136, 40234077, 20501408, 35733466, 51091822, 10926], magnitude: 1, normalized: true }, y: Field { n: [36247712, 57643868, 6674759, 44291393, 17907191, 36788512, 40557044, 24023261, 19587829, 2970989], magnitude: 1, normalized: true }, infinity: false })), power: Collateral(TokenAmount(240294061840752503544.981147537448467458)) }, Validator { public_key: ValidatorKey(PublicKey(Affine { x: Field { n: [18578878, 61633308, 2495662, 37702769, 36545414, 54191356, 19602721, 57137599, 25760848, 2859016], magnitude: 1, normalized: true }, y: Field { n: [29543455, 13876720, 63310592, 243088, 13788505, 64487894, 48829101, 11685307, 35831551, 420553], magnitude: 1, normalized: true }, infinity: false })), power: Collateral(TokenAmount(110295970415364626470.687780687649357081)) }, Validator { public_key: ValidatorKey(PublicKey(Affine { x: Field { n: [31010028, 54145446, 6940562, 62087053, 33016639, 10323459, 2077719, 59128859, 49710565, 2639186], magnitude: 1, normalized: true }, y: Field { n: [37940518, 11659126, 63687028, 36432875, 20252723, 7946136, 34829891, 44457333, 65529486, 3720934], magnitude: 1, normalized: true }, infinity: false })), power: Collateral(TokenAmount(144876535424238232501.135916381695196804)) }, Validator { public_key: ValidatorKey(PublicKey(Affine { x: Field { n: [52944382, 12119575, 32905102, 26052370, 37667144, 49890936, 47145302, 34399400, 43280722, 2454277], magnitude: 1, normalized: true }, y: Field { n: [5302115, 42480971, 8372750, 56543379, 40910408, 10241748, 41324997, 8728128, 27622139, 4116983], magnitude: 1, normalized: true }, infinity: false })), power: Collateral(TokenAmount(244151555068027301090.802598195875934692)) }], accounts: [Actor { meta: Account(Account { owner: SignerAddr(Address("f13u4dxk55byval467pnibbidufyqyfhcjwhibkbq")) }), balance: TokenAmount(122014837228941740106.291898700541256388) }, Actor { meta: Multisig(Multisig { signers: [SignerAddr(Address("f1w5oxhfilczr2y3scnzj7ylxpay33hznwdjgzuki")), SignerAddr(Address("f1zugbydwxigyo74pdbd3uhu453jzhtdrj4ht52vq"))], threshold: 2, vesting_duration: 16790056244545956382, vesting_start: 1 }), balance: TokenAmount(154901290656271014880.618070501068472501) }, Actor { meta: Multisig(Multisig { signers: [SignerAddr(Address("f1npk7xgnjkuh7id44sqqbpzkwwnp4u235tf6jkjy")), SignerAddr(Address("f1ip2awq6jnhgx6344v3bvnbfw25nigltin7gzyfq")), SignerAddr(Address("f1fgz6lkkzvmb5xkutbdzs35gthsf2vfu5jewyjaa")), SignerAddr(Address("f1dslufk56vypkuddi6uvrxpw2fy3yude7646ro3a")), SignerAddr(Address("f1nl4odcuue2yvrqzz4ko6e662bjluqdtxi2v3rxi"))], threshold: 1, vesting_duration: 2500165101080306444, vesting_start: 9279003023009299343 }), balance: TokenAmount(38327555024375304023.694414229681961879) }, Actor { meta: Account(Account { owner: SignerAddr(Address("f410fuch6wohmpgbbbp5kq5646e3h2jlqesmvj2xc7ci")) }), balance: TokenAmount(162820166943316926189.955399276024787701) }, Actor { meta: Multisig(Multisig { signers: [SignerAddr(Address("f1hmylocbnh3etz6dssra5g7ig5vq3skjkhnwmr2a")), SignerAddr(Address("f12xoqanu7mmekzupjm3j2kmydqzixvpece7twysi"))], threshold: 2, vesting_duration: 13724413678811258187, vesting_start: 11908049198691765692 }), balance: TokenAmount(204959287727705804266.508384858093430754) }], eam_permission_mode: Unrestricted, ipc: None }
Loading