Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
name: "on segwit recipient",
transaction: fromTransactionRaw({
family: "bitcoin",
recipient: "34N7XoKANmM66ZQDyQf2j8hPaTo6v5X8eA",
amount: "998",
feePerByte: "1",
networkInfo
}),
expectedStatus: {
amount: BigNumber("998"),
// FIXME fee are reloaded?
// estimatedFees: BigNumber("250"),
// totalSpent: BigNumber("1248"),
errors: {},
warnings: {
feeTooHigh: new FeeTooHigh()
}
}
},
{
name: "on native segwit recipient",
transaction: fromTransactionRaw({
family: "bitcoin",
recipient: "bc1qqmxqdrkxgx6swrvjl9l2e6szvvkg45all5u4fl",
amount: "997",
feePerByte: "1",
networkInfo
}),
expectedStatus: {
amount: BigNumber("997"),
// FIXME fee are reloaded?
// estimatedFees: BigNumber("250"),
const warnings = {};
const useAllAmount = !!t.useAllAmount;
const estimatedFees = defaultGetFees(a, t);
const totalSpent = useAllAmount
? a.balance
: BigNumber(t.amount).plus(estimatedFees);
const amount = useAllAmount
? a.balance.minus(estimatedFees)
: BigNumber(t.amount);
if (amount.gt(0) && estimatedFees.times(10).gt(amount)) {
warnings.feeTooHigh = new FeeTooHigh();
}
if (totalSpent.gt(a.balance)) {
errors.amount = new NotEnoughSpendableBalance();
} else if (
minimalBaseAmount &&
a.balance.minus(totalSpent).lt(minimalBaseAmount)
) {
errors.amount = new NotEnoughSpendableBalance();
} else if (
minimalBaseAmount &&
t.recipient.includes("new") &&
amount.lt(minimalBaseAmount)
) {
// mimic XRP base minimal for new addresses
errors.amount = new NotEnoughBalanceBecauseDestinationNotCreated(null, {
const errors = {};
const warnings = {};
const useAllAmount = !!t.useAllAmount;
const estimatedFees = defaultGetFees(account, t);
const totalSpent = useAllAmount
? account.balance
: BigNumber(t.amount).plus(estimatedFees);
const amount = useAllAmount
? account.balance.minus(estimatedFees)
: BigNumber(t.amount);
if (amount.gt(0) && estimatedFees.times(10).gt(amount)) {
warnings.feeTooHigh = new FeeTooHigh();
}
// Fill up transaction errors...
if (totalSpent.gt(account.balance)) {
errors.amount = new NotEnoughBalance();
}
// Fill up recipient errors...
if (!t.recipient) {
errors.recipient = new RecipientRequired("");
} else if (isInvalidRecipient(t.recipient)) {
errors.recipient = new InvalidAddress("");
}
return Promise.resolve({
errors,
throw error;
}
}
);
}
const totalSpent = useAllAmount ? a.balance : t.amount.plus(estimatedFees);
const amount = useAllAmount ? a.balance.minus(estimatedFees) : t.amount;
// FIXME libcore have a bug that don't detect some cases like when doing send max!
if (!errors.amount && useAllAmount && !amount.gt(0)) {
errors.amount = new NotEnoughBalance();
}
if (amount.gt(0) && estimatedFees.times(10).gt(amount)) {
warnings.feeTooHigh = new FeeTooHigh();
}
if (!errors.amount && amount.eq(0)) {
errors.amount = new AmountRequired();
}
return Promise.resolve({
errors,
warnings,
estimatedFees,
amount,
totalSpent
});
};
const estimatedFees = defaultGetFees(a, t);
const totalSpent = useAllAmount
? account.balance
: tokenAccount
? BigNumber(t.amount)
: BigNumber(t.amount).plus(estimatedFees);
const amount = useAllAmount
? tokenAccount
? BigNumber(t.amount)
: account.balance.minus(estimatedFees)
: BigNumber(t.amount);
if (amount.gt(0) && estimatedFees.times(10).gt(amount)) {
warnings.feeTooHigh = new FeeTooHigh();
}
// Fill up transaction errors...
if (totalSpent.gt(account.balance)) {
errors.amount = new NotEnoughBalance();
}
// Fill up recipient errors...
if (!t.recipient) {
errors.recipient = new RecipientRequired("");
} else if (isInvalidRecipient(t.recipient)) {
errors.recipient = new InvalidAddress("");
}
return Promise.resolve({
errors,
family: "ethereum",
recipient: "0x17733CAb76d9A2112576443F21735789733B1ca3",
amount: "10000000000000",
gasPrice: "100000000",
userGasLimit: "21000",
estimatedGasLimit: null,
feeCustomUnit: null,
networkInfo: null
}),
expectedStatus: {
amount: BigNumber("10000000000000"),
estimatedFees: BigNumber("2100000000000"),
totalSpent: BigNumber("12100000000000"),
errors: {},
warnings: {
feeTooHigh: new FeeTooHigh()
}
}
}
],
raw: {
id:
"libcore:1:ethereum:xpub6BemYiVNp19ZzH73tAbE9guoQcyygwpWgmrch2J2WsbJhxUSnjZXpMnAKru6wXK3AWxU2fywYBCdojmwnFL6qiH3ByqXpDJ2PKGijdaNvAb:",
seedIdentifier:
"046575fa4cc4274a90599226af2493b8bdaf978674dc777bac4c3ef1667792d7339ef42ce783c0c4d83306720015473897508ef6029e7400869ea515526f4394c9",
name: "Ethereum 1",
derivationMode: "",
index: 0,
freshAddress: "0x519192a437e6aeb895Cec72828A73B11b698dE3a",
freshAddressPath: "44'/60'/0'/0/0",
pendingOperations: [],
currencyId: "ethereum",
const getTransactionStatus = (a, t) => {
const errors = {};
const warnings = {};
const estimatedFees = (t.gasPrice || BigNumber(0)).times(getGasLimit(t));
const totalSpent = BigNumber(t.amount || 0).plus(estimatedFees);
const amount = BigNumber(t.amount || 0);
if (amount.gt(0) && estimatedFees.times(10).gt(amount)) {
warnings.feeTooHigh = new FeeTooHigh();
}
const gasLimit = getGasLimit(t);
if (!t.gasPrice) {
errors.gasPrice = new FeeNotLoaded();
} else if (gasLimit.eq(0)) {
errors.gasLimit = new FeeRequired();
} else if (totalSpent.gt(a.balance)) {
errors.amount = new NotEnoughBalance();
}
if (t.estimatedGasLimit && gasLimit.lt(t.estimatedGasLimit)) {
warnings.gasLimit = new GasLessThanEstimate();
}
let recipientWarning = getRecipientWarning(a.currency, t.recipient);
}
const totalSpent = useAllAmount
? account.balance
: tokenAccount
? BigNumber(t.amount || 0)
: BigNumber(t.amount || 0).plus(estimatedFees);
const amount = useAllAmount
? tokenAccount
? tokenAccount.balance
: account.balance.minus(estimatedFees)
: BigNumber(t.amount || 0);
if (!tokenAccount && amount.gt(0) && estimatedFees.times(10).gt(amount)) {
warnings.feeTooHigh = new FeeTooHigh();
}
if (!errors.amount && amount.eq(0)) {
errors.amount = new AmountRequired();
}
return Promise.resolve({
errors,
warnings,
estimatedFees,
amount,
totalSpent
});
};
const getTransactionStatus = async (a, t) => {
const errors = {};
const warnings = {};
const baseReserve = t.networkInfo ? t.networkInfo.baseReserve : BigNumber(0);
const estimatedFees = t.fee || BigNumber(0);
const totalSpent = !t.useAllAmount
? t.amount.plus(estimatedFees)
: a.balance.minus(baseReserve);
const amount = t.useAllAmount ? a.balance.minus(estimatedFees) : t.amount;
if (amount.gt(0) && estimatedFees.times(10).gt(amount)) {
warnings.feeTooHigh = new FeeTooHigh();
}
if (!t.fee) {
errors.fee = new FeeNotLoaded();
} else if (t.fee.eq(0)) {
errors.fee = new FeeRequired();
totalSpent.gt(a.balance.minus(baseReserve));
} else if (totalSpent.gt(a.balance.minus(baseReserve))) {
errors.amount = new NotEnoughSpendableBalance();
} else if (
amount.lt(baseReserve) &&
!(await isAddressActivated(a, t.recipient))
) {
errors.amount = new NotEnoughBalanceBecauseDestinationNotCreated();
}
const getTransactionStatus = async (a, t) => {
const errors = {};
const warnings = {};
const r = await getServerInfo(a.endpointConfig);
const reserveBaseXRP = parseAPIValue(r.validatedLedger.reserveBaseXRP);
const estimatedFees = BigNumber(t.fee || 0);
const totalSpent = BigNumber(t.amount).plus(estimatedFees);
const amount = BigNumber(t.amount);
if (amount.gt(0) && estimatedFees.times(10).gt(amount)) {
warnings.feeTooHigh = new FeeTooHigh();
}
if (!t.fee) {
errors.fee = new FeeNotLoaded();
} else if (t.fee.eq(0)) {
errors.fee = new FeeRequired();
} else if (totalSpent.gt(a.balance.minus(reserveBaseXRP))) {
errors.amount = new NotEnoughSpendableBalance();
} else if (
t.recipient &&
(await cachedRecipientIsNew(a.endpointConfig, t.recipient)) &&
t.amount.lt(reserveBaseXRP)
) {
const f = formatAPICurrencyXRP(reserveBaseXRP);
errors.amount = new NotEnoughBalanceBecauseDestinationNotCreated("", {
minimalAmount: `${f.currency} ${BigNumber(f.value).toFixed()}`