Skip to content

Commit

Permalink
feat(node): configurable chain id (#1230)
Browse files Browse the repository at this point in the history
Co-authored-by: cryptoAtwill <[email protected]>
  • Loading branch information
cryptoAtwill and cryptoAtwill authored Dec 9, 2024
1 parent a2fe0e3 commit c1c51f7
Show file tree
Hide file tree
Showing 13 changed files with 99 additions and 50 deletions.
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

0 comments on commit c1c51f7

Please sign in to comment.