public void TestMethod_ExecuteSellOrder_Success()
        {
            var    inmemory_storage = new AccountInMemoryStorage();
            Wallet wallet           = new Wallet(inmemory_storage, NETWORK_ID);

            wallet.RestoreAccount("", MERCHANT_PRIVATE_KEY);

            var node = new RPCClient("Test");
            var res  = wallet.Sync(node).Result;

            var result = wallet.LookForNewTrade(DISCOUNT_TOKEN, REWARD_TOKEN).Result;

            var trade = result.GetBlock();

            var discount_token = new NonFungibleToken();

            discount_token.TokenCode      = trade.BuyTokenCode;
            discount_token.Denomination   = trade.BuyAmount;
            discount_token.ExpirationDate = DateTime.Now + TimeSpan.FromDays(365);
            discount_token.SerialNumber   = discount_token.CalculateHash();
            discount_token.RedemptionCode = "TEST";
            discount_token.Sign(MERCHANT_PRIVATE_KEY);

            //trade.Fee = trade.Fee * 2;
            //trade.FeeType = AuthorizationFeeTypes.BothParties;

            var execute = wallet.ExecuteSellOrder(trade, null, discount_token).Result;

            Assert.AreEqual(APIResultCodes.Success, execute.ResultCode);
        }
示例#2
0
        APIResultCodes SendDiscountToken(NonFungibleToken disount_token)
        {
            _SendTransferBlock = CreateSendDiscountTokenBlock(disount_token, _DiscountTokenBlock);
            var authorizer = new SendTransferAuthorizer(serviceAccount, accountCollection);

            return(authorizer.Authorize <SendTransferBlock>(ref _SendTransferBlock));
        }
示例#3
0
        public void SendNonFungibleToken_1()
        {
            CreateFirstGenesisBlock();

            DiscountTokenGenesis();

            var disount_token = new NonFungibleToken();

            disount_token.Denomination   = 50;
            disount_token.TokenCode      = "Custom.DISC";
            disount_token.RedemptionCode = "12345";
            disount_token.ExpirationDate = DateTime.Now + TimeSpan.FromDays(365); // one year
            disount_token.SerialNumber   = disount_token.CalculateHash();         // Just set to some random string
            disount_token.Sign(PrivateKey1);

            var result = SendDiscountToken(disount_token);

            Assert.AreEqual(APIResultCodes.Success, result);

            var previous_GRFT_balance = _DiscountTokenBlock.Balances[LyraGlobal.OFFICIALTICKERCODE];
            var new_GRFT_balance      = _SendTransferBlock.Balances[LyraGlobal.OFFICIALTICKERCODE];

            var previous_DISC_balance = _DiscountTokenBlock.Balances["Custom.DISC"];
            var new_DISC_balance      = _SendTransferBlock.Balances["Custom.DISC"];

            Assert.AreEqual(0, previous_GRFT_balance - new_GRFT_balance - serviceAccount.GetLastServiceBlock().TransferFee);
            Assert.AreEqual(0, previous_DISC_balance - new_DISC_balance - 50);

            Assert.AreEqual(1799999899, _SendTransferBlock.Balances[LyraGlobal.OFFICIALTICKERCODE]);
            Assert.AreEqual(99950, _SendTransferBlock.Balances["Custom.DISC"]);
        }
示例#4
0
        APIResultCodes ProcessReceiveDiscountToken(NonFungibleToken discount_token)
        {
            var authorizer = new NewAccountAuthorizer(serviceAccount, accountCollection);
            var block      = CreateReceiveDiscountBlockOnAcc2(discount_token);

            return(authorizer.Authorize <OpenWithReceiveTransferBlock>(ref block));
        }
示例#5
0
        OpenWithReceiveTransferBlock CreateReceiveDiscountBlockOnAcc2(NonFungibleToken discount_token)
        {
            _OpenAccount2Block = new OpenWithReceiveTransferBlock
            {
                AccountID   = AccountId2,
                AccountType = AccountTypes.Standard,
                ServiceHash = string.Empty,
                SourceHash  = _SendTransferBlock.Hash,
                Fee         = 0,
                FeeType     = AuthorizationFeeTypes.NoFee,
                Balances    = new Dictionary <string, decimal>()
            };

            _OpenAccount2Block.Balances.Add("Custom.DISC", 50);

            if (discount_token != null)
            {
                _OpenAccount2Block.NonFungibleToken = discount_token;
            }

            _OpenAccount2Block.InitializeBlock(null, PrivateKey2, AccountId2);

            // _OpenAccountBlock.Signature = Signatures.GetSignature(PrivateKey2, _OpenAccountBlock.Hash);

            return(_OpenAccount2Block);
        }
示例#6
0
        public void ReceiveNonFungibleToken_5()
        {
            CreateFirstGenesisBlock();

            DiscountTokenGenesis();

            var encryptor = new ECC_DHA_AES_Encryptor();

            var discount_token = new NonFungibleToken();

            discount_token.Denomination = 50;
            discount_token.TokenCode    = "Custom.DISC";
            //  disount_token.OriginHash = "some unique random string";
            discount_token.ExpirationDate = DateTime.Now + TimeSpan.FromDays(365);
            discount_token.SerialNumber   = discount_token.CalculateHash(); // Just set to some random string
            discount_token.RedemptionCode = encryptor.Encrypt(PrivateKey1, AccountId2, discount_token.SerialNumber, "12345678901234567890");
            discount_token.Sign(PrivateKey1);

            SendDiscountToken(discount_token);

            ProcessReceiveDiscountToken(discount_token);

            var decryptor = new ECC_DHA_AES_Encryptor();

            string decrypted_redemption_code = decryptor.Decrypt(PrivateKey2, AccountId1, _OpenAccount2Block.NonFungibleToken.SerialNumber, (_OpenAccount2Block.NonFungibleToken as NonFungibleToken).RedemptionCode);

            Assert.AreEqual("12345678901234567890", decrypted_redemption_code);
        }
示例#7
0
        public void SendNonFungibleToken_3()
        {
            CreateFirstGenesisBlock();

            DiscountTokenGenesis();

            var disount_token = new NonFungibleToken();

            disount_token.Denomination = 1;
            //disount_token.OriginHash = "some unique random string";
            disount_token.TokenCode      = "Custom.DISC";
            disount_token.RedemptionCode = "12345";

            var result = SendDiscountToken(disount_token);

            Assert.AreEqual(APIResultCodes.InvalidNonFungibleAmount, result);
        }
示例#8
0
        public void SendNonFungibleToken_4_WRONG_TOKEN_CODE()
        {
            CreateFirstGenesisBlock();

            DiscountTokenGenesis();

            var disount_token = new NonFungibleToken();

            disount_token.Denomination = 50;
            disount_token.TokenCode    = LyraGlobal.OFFICIALTICKERCODE;
            //disount_token.OriginHash = "some unique random string";
            disount_token.RedemptionCode = "12345";

            var result = SendDiscountToken(disount_token);

            Assert.AreEqual(APIResultCodes.InvalidNonFungibleTokenCode, result);
        }
示例#9
0
        SendTransferBlock CreateSendDiscountTokenBlock(NonFungibleToken discount_token, TransactionBlock previousBlock)
        {
            decimal TransferFee = serviceAccount.GetLastServiceBlock().TransferFee;

            sbyte precision = _FirstGenesisBlock.Precision;

            //long atomicamount = (long)(50 * Math.Pow(10, precision));

            SendTransferBlock sendBlock = new SendTransferBlock
            {
                AccountID            = AccountId1,
                ServiceHash          = string.Empty,
                DestinationAccountId = AccountId2,
                Balances             = new Dictionary <string, decimal>(),
                Fee     = TransferFee,
                FeeType = AuthorizationFeeTypes.Regular,
                FeeCode = LyraGlobal.OFFICIALTICKERCODE
            };

            sendBlock.Balances.Add(LyraGlobal.OFFICIALTICKERCODE, previousBlock.Balances[LyraGlobal.OFFICIALTICKERCODE] - TransferFee);
            sendBlock.Balances.Add("Custom.DISC", previousBlock.Balances["Custom.DISC"] - 50);

            if (discount_token != null)
            {
                //sendBlock.NonFungibleTokens = new List<INonFungibleToken>();
                //sendBlock.NonFungibleTokens.Add(discount_token);
                sendBlock.NonFungibleToken = discount_token;

                //if (discount_token.OriginHash == null)
                //    discount_token.OriginHash = sendBlock.CalculateHash();
            }


            sendBlock.InitializeBlock(previousBlock, PrivateKey1, AccountId1);

            //sendBlock.Signature = Signatures.GetSignature(PrivateKey1, sendBlock.Hash);

            return(sendBlock);
        }
示例#10
0
        public void ReceiveNonFungibleToken_3()
        {
            CreateFirstGenesisBlock();

            DiscountTokenGenesis();

            var disount_token = new NonFungibleToken();

            disount_token.Denomination = 50;
            disount_token.TokenCode    = "Custom.DISC";
            //  disount_token.OriginHash = "some unique random string";
            disount_token.RedemptionCode = "12345678901234567890";
            disount_token.Sign(PrivateKey1);

            SendDiscountToken(disount_token);

            var result = ProcessReceiveDiscountToken(disount_token);

            Assert.AreEqual(APIResultCodes.Success, result);

            Assert.AreEqual(50, _OpenAccount2Block.Balances["Custom.DISC"]);
        }
示例#11
0
        public void ReceiveNonFungibleToken_1()
        {
            CreateFirstGenesisBlock();

            DiscountTokenGenesis();

            var disount_token = new NonFungibleToken();

            disount_token.Denomination = 50;
            disount_token.TokenCode    = "Custom.DISC";
            //  disount_token.OriginHash = "some unique random string";
            disount_token.RedemptionCode = "12345";

            // THis will fail as the token is not signed
            SendDiscountToken(disount_token);

            var result = ProcessReceiveDiscountToken(null);

            Assert.AreEqual(APIResultCodes.SourceSendBlockNotFound, result);

            Assert.AreEqual(50, _OpenAccount2Block.Balances["Custom.DISC"]);
        }
        private void UpdateNfTokenBalance(ExplorerDbContext context, Account account, BalanceSheetDto tokenBalance)
        {
            foreach (var tokenId in tokenBalance.Ids)
            {
                var existingToken = context.NonFungibleTokens.SingleOrDefault(p => p.Id.Equals(tokenId));
                if (existingToken == null)
                {
                    var nftoken = new NonFungibleToken
                    {
                        Chain       = tokenBalance.ChainName,
                        TokenSymbol = tokenBalance.Symbol,
                        Id          = tokenId,
                        Account     = account,
                    };

                    account.NonFungibleTokens.Add(nftoken);
                }
                else
                {
                    existingToken.Account = account;
                }
            }
        }
示例#13
0
        public void ReceiveNonFungibleToken_4()
        {
            CreateFirstGenesisBlock();

            DiscountTokenGenesis();

            var disount_token = new NonFungibleToken();

            disount_token.Denomination = 50;
            disount_token.TokenCode    = "Custom.DISC";
            //  disount_token.OriginHash = "some unique random string";
            disount_token.RedemptionCode = "12345678901234567890";
            disount_token.Sign(PrivateKey1);

            SendDiscountToken(disount_token);

            ProcessReceiveDiscountToken(disount_token);

            var encryptor = new ECC_DHA_AES_Encryptor();

            string decrypted_redemption_code = encryptor.Decrypt(PrivateKey2, AccountId1, "54CRv2pEjNj8c3UBPv4AxYmEKEojmVdAagTpgSjHieAq", "54CRv2pEjNj8c3UBPv4AxYmEKEojmVdAagTpgSjHieAq");

            //Assert.AreEqual("12345678901234567890", decrypted_redemption_code);
        }