/// <summary> /// Derives an address and keys from given private key /// </summary> /// <param name="privKey">HEX or WIF private key to derive address from</param> /// <returns>An object with address and its keys in different formats</returns> /// private JObject GetAddress(string privKey) { JObject obj = new JObject(); KeyPair kp = new KeyPair(privKey.ToBytePrivateKey()); var address = kp.AsAddress(); obj["wif"] = kp.Export(); obj["address"] = address; obj["privkey"] = kp.PrivateKey.ToHexString(); obj["pubkey"] = kp.PublicKey.ToString(); obj["scripthash"] = address.ToScriptHash().ToString(); return(obj); }
private JObject CreateAddress() { var privateKey = new byte[32]; using (var generator = RandomNumberGenerator.Create()) { generator.GetBytes(privateKey); } var kp = new KeyPair(privateKey); var jaddress = new JObject(); var address = kp.AsAddress(); jaddress["wif"] = kp.Export(); jaddress["address"] = address; jaddress["privkey"] = kp.PrivateKey.ToHexString(); jaddress["pubkey"] = kp.PublicKey.ToString(); jaddress["scripthash"] = address.ToScriptHash().ToString(); return(jaddress); }
public bool CallContract(KeyPair key, string scriptHash, byte[] bytes, out byte[] txhash) { var inputs = new List <CoinReference>(); var outputs = new List <TransactionOutput>(); decimal gasCost = 0; if (key != null) { var unspent = GetUnspent(key.AsAddress(), UInt256.Zero); if (!unspent.ContainsKey("CRON")) { throw new RpcException(-3227, "No CRONs available"); } var sources = unspent["CRON"]; decimal selectedGas = 0; foreach (var src in sources) { selectedGas += src.value; var input = new CoinReference() { PrevHash = UInt256.Parse(src.txid), PrevIndex = (ushort)src.index, }; inputs.Add(input); if (selectedGas >= gasCost) { break; } } if (selectedGas < gasCost) { throw new RpcException(-3228, "Not enough CRONs available"); } var targetAssetID = reverseHex(ASSET_CRON).HexToBytes(); if (selectedGas > gasCost) { var left = selectedGas - gasCost; var change = new TransactionOutput() { AssetId = new UInt256(targetAssetID), ScriptHash = key.AsSignatureScript().HexToBytes().ToScriptHash(), Value = Fixed8.FromDecimal(left) }; outputs.Add(change); } } InvocationTransaction tx = new InvocationTransaction() { Attributes = new TransactionAttribute[0], Version = 0, Script = bytes, Gas = Fixed8.FromDecimal(gasCost), Inputs = inputs.ToArray(), Outputs = outputs.ToArray() }; if (key == null) { return(CallNoInvoke(tx, out txhash)); } txhash = tx.Hash.ToArray().Reverse().ToArray(); return(SignAndRelay(tx, new[] { key })); }