public async Task PushTransactionTest() { var abiJsonToBinArgs = new AbiJsonToBinParams { Code = ContractInfo.ContractName, Action = CreatePostActionName, Args = new CreatePostArgs { UrlPhoto = "test_1_url", AccountCreator = User.Login, IpfsHashPhoto = "test_1_hash" //ParentPost = 1 } }; var abiJsonToBin = await Api.AbiJsonToBin(abiJsonToBinArgs, CancellationToken); Assert.IsFalse(abiJsonToBin.IsError); var args = new CreateTransactionArgs { Actions = new[] { new Action { Account = User.Login, Name = CreatePostActionName, Authorization = new[] { new PermissionLevel { Actor = User.Login, Permission = "active" } }, Data = abiJsonToBin.Result.Binargs } }, PrivateKeys = new List <byte[]> { User.PrivateActiveKey } }; var packedTransaction = await Api.CreatePackedTransaction(args, CancellationToken); var resp = await Api.PushTransaction(packedTransaction, CancellationToken); WriteLine(resp); Assert.IsFalse(resp.IsError); }
public async Task <SignedTransaction> CreateTransaction(CreateTransactionArgs args, CancellationToken token) { //1 var infoResp = await GetInfo(token); if (infoResp.IsError) { return(null); } var info = infoResp.Result; //2 var blockArgs = new GetBlockParams { BlockNumOrId = info.HeadBlockId }; var getBlock = await GetBlock(blockArgs, token); if (getBlock.IsError) { return(null); } var block = getBlock.Result; //3 var transaction = new SignedTransaction { RefBlockNum = (ushort)(block.BlockNum & 0xffff), RefBlockPrefix = block.RefBlockPrefix, Expiration = block.Timestamp.Value.AddSeconds(30), Actions = args.Actions }; return(transaction); }
public async Task <PackedTransaction> CreatePackedTransaction(CreateTransactionArgs args, CancellationToken token) { //1 var infoResp = await GetInfo(token); if (infoResp.IsError) { return(null); } var info = infoResp.Result; //2 var blockArgs = new GetBlockParams { BlockNumOrId = info.HeadBlockId }; var getBlock = await GetBlock(blockArgs, token); if (getBlock.IsError) { return(null); } var block = getBlock.Result; //3 var transaction = new SignedTransaction { RefBlockNum = (ushort)(block.BlockNum & 0xffff), RefBlockPrefix = block.RefBlockPrefix, Expiration = block.Timestamp.Value.AddSeconds(30), Actions = args.Actions }; var packedTrx = MessageSerializer.Serialize <SignedTransaction>(transaction); var chainId = Hex.HexToBytes(info.ChainId); var msg = new byte[chainId.Length + packedTrx.Length + 32]; Array.Copy(chainId, msg, chainId.Length); Array.Copy(packedTrx, 0, msg, chainId.Length, packedTrx.Length); var sha256 = Sha256Manager.GetHash(msg); transaction.Signatures = new string[args.PrivateKeys.Count]; for (var i = 0; i < args.PrivateKeys.Count; i++) { var key = args.PrivateKeys[i]; var sig = Secp256K1Manager.SignCompressedCompact(sha256, key); var sigHex = Base58.EncodeSig(sig); transaction.Signatures[i] = sigHex; } return(new PackedTransaction { PackedTrx = Hex.ToString(packedTrx), Signatures = transaction.Signatures, PackedContextFreeData = "", Compression = "none" }); }
public async Task WalletSignTrxTest() { var abiJsonToBinArgs = new AbiJsonToBinParams { Code = ContractInfo.ContractName, Action = CreatePostActionName, Args = new CreatePostArgs { UrlPhoto = "test_1_url", AccountCreator = User.Login, IpfsHashPhoto = "test_1_hash" //ParentPost = 1 } }; var abiJsonToBin = await Api.AbiJsonToBin(abiJsonToBinArgs, CancellationToken); Assert.IsFalse(abiJsonToBin.IsError); var accountParams = new GetAccountParams { AccountName = User.Login }; var unlock = await Api.WalletUnlock(User.Login, User.Password, CancellationToken); Assert.IsFalse(unlock.IsError); var accR = await Api.GetAccount(accountParams, CancellationToken); Assert.IsFalse(accR.IsError); var publicKeys = accR.Result.Permissions.First(p => p.PermName == "active").RequiredAuth.Keys.Select(k => k.Key).ToArray(); var args = new CreateTransactionArgs { Actions = new[] { new EOS.Models.Action { Account = User.Login, Name = CreatePostActionName, Authorization = new[] { new PermissionLevel { Actor = User.Login, Permission = "active" } }, Data = abiJsonToBin.Result.Binargs } }, PrivateKeys = new List <byte[]> { User.PrivateActiveKey } }; var trx = await Api.CreateTransaction(args, CancellationToken); var infoResp = await Api.GetInfo(CancellationToken.None); var info = infoResp.Result; var resp = await Api.WalletSignTrx(trx, publicKeys, info.ChainId, CancellationToken.None); WriteLine(resp); Assert.IsFalse(resp.IsError); var wlock = await Api.WalletLock(User.Login, CancellationToken); Assert.IsFalse(wlock.IsError); }