public static bool TryGetAccountHash(this ExpressChain chain, string name, [MaybeNullWhen(false)] out UInt160 accountHash) { if (chain.Wallets != null && chain.Wallets.Count > 0) { for (int i = 0; i < chain.Wallets.Count; i++) { if (string.Equals(name, chain.Wallets[i].Name, StringComparison.OrdinalIgnoreCase)) { accountHash = chain.Wallets[i].DefaultAccount.GetScriptHash(); return(true); } } } Debug.Assert(chain.ConsensusNodes != null && chain.ConsensusNodes.Count > 0); for (int i = 0; i < chain.ConsensusNodes.Count; i++) { var nodeWallet = chain.ConsensusNodes[i].Wallet; if (string.Equals(name, nodeWallet.Name, StringComparison.OrdinalIgnoreCase)) { accountHash = nodeWallet.DefaultAccount.GetScriptHash(); return(true); } } if (GENESIS.Equals(name, StringComparison.OrdinalIgnoreCase)) { var keys = chain.ConsensusNodes .Select(n => n.Wallet.DefaultAccount ?? throw new Exception()) .Select(a => new KeyPair(a.PrivateKey.HexToBytes()).PublicKey) .ToArray(); var contract = Neo.SmartContract.Contract.CreateMultiSigContract((keys.Length * 2 / 3) + 1, keys); accountHash = contract.ScriptHash; return(true); } return(chain.TryParseScriptHash(name, out accountHash)); }