Example #1
0
        public void GetHashData()
        {
            var snapshot = Blockchain.Singleton.GetSnapshot().Clone();
            var engine   = ApplicationEngine.Create(TriggerType.Application, null, snapshot);

            Assert.ThrowsException <ArgumentException>(() => new MethodCallback(engine, UInt160.Zero, "_test"));

            var contract = new ContractState()
            {
                Manifest = new ContractManifest()
                {
                    Permissions = new ContractPermission[0],
                    Groups      = new ContractGroup[0],
                    Trusts      = WildcardContainer <UInt160> .Create(),
                    Abi         = new ContractAbi()
                    {
                        Methods = new ContractMethodDescriptor[]
                        {
                            new ContractMethodDescriptor()
                            {
                                Name = "test", Parameters = new ContractParameterDefinition[0]
                            }
                        },
                        Events = new ContractEventDescriptor[0],
                    },
                },
                Script = new byte[] { 1, 2, 3 },
                Hash   = new byte[] { 1, 2, 3 }.ToScriptHash()
            };

            engine.LoadScript(contract.Script);
            engine.Snapshot.AddContract(contract.Hash, contract);

            Assert.ThrowsException <InvalidOperationException>(() => new MethodCallback(engine, contract.Hash, "test"));

            contract.Manifest.Permissions = new ContractPermission[] {
                new ContractPermission()
                {
                    Contract = ContractPermissionDescriptor.Create(contract.Hash),
                    Methods  = WildcardContainer <string> .Create("test")
                }
            };
            var data = new MethodCallback(engine, contract.Hash, "test");

            Assert.AreEqual(0, engine.CurrentContext.EvaluationStack.Count);
            var array = new VM.Types.Array();

            data.LoadContext(engine, array);

            Assert.AreEqual(3, engine.CurrentContext.EvaluationStack.Count);
            Assert.AreEqual("9bc4860bb936abf262d7a51f74b4304833fee3b2", engine.Pop <VM.Types.ByteString>().GetSpan().ToHexString());
            Assert.AreEqual("test", engine.Pop <VM.Types.ByteString>().GetString());
            Assert.IsTrue(engine.Pop() == array);
        }