Esempio n. 1
0
        /**
         * @TODO this should extend file system based tests and resolve tests via autofac container
         */
        public DeltaExecutorTests()
        {
            _specProvider  = new CatalystSpecProvider();
            _stateProvider = new StateProvider(new StateDb(), new StateDb(), LimboLogs.Instance);
            var  storageProvider = new StorageProvider(new StateDb(), _stateProvider, LimboLogs.Instance);
            IKvm virtualMachine  = new KatVirtualMachine(_stateProvider, storageProvider, new StateUpdateHashProvider(),
                                                         _specProvider, LimboLogs.Instance);
            var logger = Substitute.For <ILogger>();

            logger.IsEnabled(Arg.Any <LogEventLevel>()).Returns(true);

            _senderPrivateKey = _cryptoContext.GeneratePrivateKey();
            _senderPublicKey  = _senderPrivateKey.GetPublicKey();

            _recipient  = _cryptoContext.GeneratePrivateKey().GetPublicKey();
            _poorSender = _cryptoContext.GeneratePrivateKey().GetPublicKey();

            _stateProvider.CreateAccount(_poorSender.ToKvmAddress(), 0.Kat());
            _stateProvider.CreateAccount(_senderPublicKey.ToKvmAddress(), 1000.Kat());
            _stateProvider.CreateAccount(Address.Zero, 1000.Kat());
            _stateProvider.Commit(_specProvider.GenesisSpec);

            _executor = new DeltaExecutor(_specProvider, _stateProvider, storageProvider, virtualMachine,
                                          new FfiWrapper(), logger);

            _signingContext = new SigningContext
            {
                NetworkType   = NetworkType.Devnet,
                SignatureType = SignatureType.TransactionPublic
            };
        }
Esempio n. 2
0
        public void Fails_when_sender_not_specified()
        {
            var delta = EntryUtils.PrepareSingleContractEntryDelta(_recipient, _senderPublicKey, 3);

            delta.PublicEntries[0].SenderAddress = ByteString.Empty;
            delta.PublicEntries[0].Signature     = delta.PublicEntries[0]
                                                   .GenerateSignature(_cryptoContext, _senderPrivateKey, _signingContext);

            var tracer = Substitute.For <ITxTracer>();

            tracer.IsTracingReceipt.Returns(true);

            _executor.Execute(delta, tracer);

            tracer.Received().MarkAsFailed(_recipient.ToKvmAddress(), 21000L, Bytes.Empty, "invalid");
        }
Esempio n. 3
0
 public static Delta PrepareSingleContractEntryDelta(IPublicKey recipient,
                                                     IPublicKey sender,
                                                     UInt256 amount,
                                                     string dataHex = "0x",
                                                     ulong nonce    = 0)
 {
     return(new Delta
     {
         TimeStamp = Timestamp.FromDateTime(DateTime.UtcNow),
         StateRoot = ByteString.CopyFrom(Keccak.EmptyTreeHash.Bytes),
         PublicEntries =
         {
             PrepareContractEntry(recipient.ToKvmAddress(), sender.ToKvmAddress(), amount, dataHex, nonce)
         }
     });
 }
Esempio n. 4
0
        public void Can_deploy_code()
        {
            var delta = EntryUtils.PrepareSingleContractEntryDelta(null, _senderPublicKey, 0,
                                                                   "0x60016000526001601FF300");

            delta.PublicEntries[0].GasLimit        = 1_000_000L;
            delta.PublicEntries[0].ReceiverAddress = ByteString.Empty;
            delta.PublicEntries[0].Signature       = delta.PublicEntries[0]
                                                     .GenerateSignature(_cryptoContext, _senderPrivateKey, _signingContext);

            var tracer = Substitute.For <ITxTracer>();

            tracer.IsTracingReceipt.Returns(true);

            _executor.Execute(delta, tracer);

            var contractAddress = Address.OfContract(_senderPublicKey.ToKvmAddress(), 0);

            tracer.Received().MarkAsSuccess(contractAddress, 53370, Arg.Any <byte[]>(), Arg.Any <LogEntry[]>());
        }
Esempio n. 5
0
 public static ByteString ToKvmAddressByteString(this IPublicKey recipient)
 {
     return(recipient?.ToKvmAddress().Bytes.ToByteString() ?? ByteString.Empty);
 }