public int AddTransfer(Transfer transfer) { if (!consensus.IsRule(height, Wallet.GetWallet().GetCurWallet().ToAddress())) { return(-1); } transfer.hash = transfer.ToHash(); if (!Wallet.Verify(transfer.sign, transfer.hash, transfer.addressIn)) { return(-2); } if (BigInt.Less(transfer.amount, "0", false)) { return(-3); } Account account = null; using (var snapshot = Entity.Root.GetComponent <LevelDBStore>().GetSnapshot()) { account = snapshot.Accounts.Get(transfer.addressIn); } if (account == null) { return(-4); } if (BigInt.Less(account.amount, transfer.amount, false)) { return(-5); } lock (transfers) { // 出块权限 if (transfers.Count > 6000) { return(-6); } transfers.Remove(transfer.hash); transfers.Add(transfer.hash, transfer); } return(1); }
public bool ApplyTransfer(DbSnapshot dbSnapshot, Transfer transfer, long height) { if (transfer.type != "tranfer") { return(true); } if (transfer.addressIn == transfer.addressOut) { return(true); } if (BigInt.Less(transfer.amount, "0", true)) { return(true); } //if (!transfer.CheckSign() && height != 1) // return true; if (height != 1) { Account accountIn = dbSnapshot.Accounts.Get(transfer.addressIn); if (accountIn == null) { return(true); } if (BigInt.Less(accountIn.amount, transfer.amount, false)) { return(true); } if (accountIn.nonce + 1 != transfer.nonce) { return(true); } accountIn.amount = BigInt.Add(accountIn.amount, transfer.amount); accountIn.index += 1; accountIn.nonce += 1; dbSnapshot.Accounts.Add(accountIn.address, accountIn); if (transferShow) { dbSnapshot.BindTransfer2Account(transfer.addressIn, accountIn.index, transfer.hash); } } Account accountOut = dbSnapshot.Accounts.Get(transfer.addressOut); if (accountOut == null) { accountOut = new Account() { address = transfer.addressOut, amount = "0", index = 0, nonce = 0 } } ; accountOut.amount = BigInt.Add(accountOut.amount, transfer.amount); accountOut.index += 1; dbSnapshot.Accounts.Add(accountOut.address, accountOut); if (transferShow) { dbSnapshot.BindTransfer2Account(transfer.addressOut, accountOut.index, transfer.hash); transfer.height = height; dbSnapshot.Transfers.Add(transfer.hash, transfer); } return(true); }