public void TestSetScript() { var node = new Node(); var script = "true"; var compiledScript = node.CompileScript(script); Console.WriteLine("Compiled script: {0}", compiledScript); var setScriptTx = new SetScriptTransaction(Accounts.Carol.PublicKey, compiledScript, 'T'); setScriptTx.Sign(Accounts.Carol); node.Broadcast(setScriptTx.GetJsonWithSignature()); Thread.Sleep(10000); var scriptInfo = node.GetObject("addresses/scriptInfo/{0}", Accounts.Carol.Address); Assert.AreEqual("TRUE", scriptInfo["scriptText"]); Assert.AreEqual(compiledScript.ToBase64(), scriptInfo["script"]); Assert.IsTrue(scriptInfo.GetInt("complexity") > 0); Assert.IsTrue(scriptInfo.GetInt("extraFee") > 0); var cleanScriptTx = new SetScriptTransaction(Accounts.Carol.PublicKey, null, 'T'); node.Broadcast(cleanScriptTx.GetJsonWithSignature()); Thread.Sleep(10000); scriptInfo = node.GetObject("addresses/scriptInfo/{0}", Accounts.Carol.Address); Assert.IsFalse(scriptInfo.ContainsKey("scriptText")); Assert.IsFalse(scriptInfo.ContainsKey("script")); Assert.AreEqual(0, scriptInfo.GetInt("complexity")); Assert.AreEqual(0, scriptInfo.GetInt("extraFee")); }
public string SetScript(PrivateKeyAccount account, byte[] script, decimal fee = 1m) { var tx = new SetScriptTransaction(account.PublicKey, script, ChainId, fee = 0.014m); tx.Sign(account); return(Broadcast(tx)); }
public void TestMultisig() { // This test works with tranfer transactions of version 2 only var node = new Node(); var script = $@" let aliceSigned = sigVerify(tx.bodyBytes, tx.proofs[0], base58'{Accounts.Alice.PublicKey.ToBase58()}') let bobSigned = sigVerify(tx.bodyBytes, tx.proofs[1], base58'{Accounts.Bob.PublicKey.ToBase58()}') aliceSigned && bobSigned"; Console.WriteLine($"Script: {script}"); var compiledScript = node.CompileScript(script); var multiAccount = PrivateKeyAccount.CreateFromSeed(PrivateKeyAccount.GenerateSeed(), AddressEncoding.TestNet); Console.WriteLine("Account generated: {0}", multiAccount.Address); node.Transfer(Accounts.Alice, multiAccount.Address, Assets.WAVES, 0.1m); Thread.Sleep(10000); Assert.IsTrue(node.GetBalance(multiAccount.Address) == 0.1m); var setScriptTx = new SetScriptTransaction(multiAccount.PublicKey, compiledScript, 'T'); setScriptTx.Sign(multiAccount); node.Broadcast(setScriptTx.GetJsonWithSignature()); Thread.Sleep(10000); var tx = new TransferTransaction(multiAccount.PublicKey, Accounts.Alice.Address, Assets.WAVES, 0.07m, 0.005m) { Version = 2 }; tx.Sign(Accounts.Alice, 0); tx.Sign(Accounts.Bob, 1); node.Broadcast(tx); Thread.Sleep(10000); Assert.IsTrue(node.GetBalance(multiAccount.Address) < 0.02m); }
public void TestChangeUserAccountScript() { var node = new Node(); var newScript = @"let tokenomicaPubKey = base58'7dkSgXFv9EpYi3C3JK76wJTkciBsVPZ1xE5fVAMB6AD9' let this = extract(tx.sender) match tx { case s: SetScriptTransaction => sigVerify(s.bodyBytes, s.proofs[0], tokenomicaPubKey) case t: TransferTransaction => let limit = extract(getInteger(tx.sender, ""limit"")) (!isDefined(t.assetId) && t.amount <= limit || isDefined(t.assetId)) && sigVerify(t.bodyBytes, t.proofs[0], tx.senderPublicKey) case m: MassTransferTransaction => let limit = extract(getInteger(this, ""limit"")) (m.totalAmount <= limit && !isDefined(m.assetId) || isDefined(m.assetId)) && sigVerify(m.bodyBytes, m.proofs[0], tx.senderPublicKey) case e: ExchangeTransaction => let limit = extract(getInteger(this, ""limit"")) ((!isDefined(e.sellOrder.assetPair.amountAsset) && e.buyOrder.amount <= limit) || isDefined(e.sellOrder.assetPair.amountAsset)) && ((!isDefined(e.sellOrder.assetPair.priceAsset) && e.sellOrder.amount <= limit) || isDefined(e.buyOrder.assetPair.amountAsset)) && sigVerify(e.bodyBytes, e.proofs[0], tx.senderPublicKey) case d: DataTransaction => sigVerify(d.bodyBytes, d.proofs[0], tokenomicaPubKey) case _ => false }"; var newCompiledScript = node.CompileScript(newScript); var tokenomicaSetScriptTx = new SetScriptTransaction(userAccount.PublicKey, newCompiledScript, AddressEncoding.TestNet, 0.14m); var s = newCompiledScript.ToBase58(); tokenomicaSetScriptTx.Sign(tokenomicaAccount); node.Broadcast(tokenomicaSetScriptTx.GetJsonWithSignature()); }