Exemplo n.º 1
0
        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"));
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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());
        }