public string SetAssetScript(PrivateKeyAccount account, Asset asset, byte[] script, char chainId, decimal fee = 1m) { var tx = new SetAssetScriptTransaction(ChainId, account.PublicKey, asset, script, fee = 1m); tx.Sign(account); return(Broadcast(tx)); }
public void TestSetAssetScript() { var node = new Node(); var wavesBalanceBefore = node.GetBalance(Accounts.Alice.Address, Assets.WAVES); Asset smartAsset = node.IssueAsset(Accounts.Alice, "SmartAsset", "Smart Asset", 100, 8, true, node.CompileScript("true")); Thread.Sleep(10000); var script = $@" match tx {{ case t : TransferTransaction => t.amount < 30000000 case bs : BurnTransaction | SetAssetScriptTransaction => true case _ => false }}"; var compiledScript = node.CompileScript(script); var setAssetScriptTransaction = new SetAssetScriptTransaction(Accounts.Alice.PublicKey, smartAsset, compiledScript, 'T', 1); setAssetScriptTransaction.Sign(Accounts.Alice); node.Broadcast(setAssetScriptTransaction); Thread.Sleep(10000); var aliceBalanceBefore = node.GetBalance(Accounts.Alice.Address, smartAsset); var bobBalanceBefore = node.GetBalance(Accounts.Bob.Address, smartAsset); for (decimal amount = 0.01m; amount < 0.5m; amount += 0.1m) { try { node.Transfer(Accounts.Alice, Accounts.Bob.Address, smartAsset, amount, 0.005m); Thread.Sleep(4000); } catch (Exception e) { Console.WriteLine(e.Message); } } Thread.Sleep(10000); var aliceBalanceAfter = node.GetBalance(Accounts.Alice.Address, smartAsset); var bobBalanceAfter = node.GetBalance(Accounts.Bob.Address, smartAsset); Assert.AreEqual(aliceBalanceBefore - aliceBalanceAfter, 0.01m + 0.11m + 0.21m); Assert.AreEqual(bobBalanceAfter - bobBalanceBefore, 0.01m + 0.11m + 0.21m); setAssetScriptTransaction = new SetAssetScriptTransaction(Accounts.Alice.PublicKey, smartAsset, node.CompileScript("false"), 'T', 1); setAssetScriptTransaction.Sign(Accounts.Alice); node.Broadcast(setAssetScriptTransaction); Thread.Sleep(12000); Assert.AreEqual(Assets.GetById(smartAsset.Id).Script.ToBase64(), node.CompileScript("false").ToBase64()); var wavesBalanceAfter = node.GetBalance(Accounts.Alice.Address, Assets.WAVES); // Check the fee Assert.AreEqual(wavesBalanceBefore, wavesBalanceAfter + 1m + 1m + 0.005m * 3 + 1m); }