218 lines
5.8 KiB
JavaScript
218 lines
5.8 KiB
JavaScript
function validateSend(params, context) {
|
|
if (!context.to) {
|
|
return {
|
|
markup: status.components.validationMessage(
|
|
"Wrong address",
|
|
"Recipient address must be specified"
|
|
)
|
|
};
|
|
}
|
|
if (!params.amount) {
|
|
return {
|
|
markup: status.components.validationMessage(
|
|
I18n.t('validation_title'),
|
|
I18n.t('validation_amount_specified')
|
|
)
|
|
};
|
|
}
|
|
|
|
var amount = params.amount.replace(",", ".");
|
|
var amountSplitted = amount.split(".");
|
|
if (amountSplitted.length === 2 && amountSplitted[1].length > 18) {
|
|
return {
|
|
markup: status.components.validationMessage(
|
|
I18n.t('validation_title'),
|
|
I18n.t('validation_amount_is_too_small')
|
|
)
|
|
};
|
|
}
|
|
|
|
try {
|
|
var val = web3.toWei(amount, "ether");
|
|
if (val <= 0) {
|
|
throw new Error();
|
|
}
|
|
} catch (err) {
|
|
return {
|
|
markup: status.components.validationMessage(
|
|
I18n.t('validation_title'),
|
|
I18n.t('validation_invalid_number')
|
|
)
|
|
};
|
|
}
|
|
|
|
var balance = web3.eth.getBalance(context.from);
|
|
var estimatedGas = web3.eth.estimateGas({
|
|
from: context.from,
|
|
to: context.to,
|
|
value: val
|
|
});
|
|
|
|
if (bn(val).plus(bn(estimatedGas)).greaterThan(bn(balance))) {
|
|
return {
|
|
markup: status.components.validationMessage(
|
|
I18n.t('validation_title'),
|
|
I18n.t('validation_insufficient_amount')
|
|
+ web3.fromWei(balance, "ether")
|
|
+ " ETH)"
|
|
)
|
|
};
|
|
}
|
|
}
|
|
|
|
function sendTransaction(params, context) {
|
|
var data = {
|
|
from: context.from,
|
|
to: context.to,
|
|
value: web3.toWei(params.amount.replace(",", "."), "ether")
|
|
};
|
|
|
|
try {
|
|
return web3.eth.sendTransaction(data);
|
|
} catch (err) {
|
|
return {error: err.message};
|
|
}
|
|
}
|
|
|
|
var send = {
|
|
name: "send",
|
|
icon: "money_white",
|
|
color: "#5fc48d",
|
|
title: I18n.t('send_title'),
|
|
description: I18n.t('send_description'),
|
|
sequentialParams: true,
|
|
params: [{
|
|
name: "amount",
|
|
type: status.types.NUMBER
|
|
}],
|
|
preview: function (params, context) {
|
|
var amountStyle = {
|
|
fontSize: 36,
|
|
color: "#000000",
|
|
height: 40
|
|
};
|
|
|
|
var amount = status.components.view(
|
|
{
|
|
flexDirection: "column",
|
|
alignItems: "flex-end",
|
|
},
|
|
[status.components.text(
|
|
{
|
|
style: amountStyle,
|
|
font: "light"
|
|
},
|
|
status.localizeNumber(params.amount, context.delimiter, context.separator)
|
|
)]);
|
|
|
|
var currency = status.components.view(
|
|
{
|
|
style: {
|
|
flexDirection: "column",
|
|
justifyContent: "flex-end",
|
|
paddingBottom: 0
|
|
}
|
|
},
|
|
[status.components.text(
|
|
{
|
|
style: {
|
|
color: "#9199a0",
|
|
fontSize: 16,
|
|
lineHeight: 18,
|
|
marginLeft: 7.5
|
|
}
|
|
},
|
|
"ETH"
|
|
)]
|
|
);
|
|
|
|
return {
|
|
markup: status.components.view(
|
|
{
|
|
style: {
|
|
flexDirection: "row",
|
|
justifyContent: "space-between",
|
|
marginTop: 8,
|
|
marginBottom: 8
|
|
}
|
|
},
|
|
[amount, currency]
|
|
)
|
|
};
|
|
},
|
|
shortPreview: function (params, context) {
|
|
return {
|
|
markup: status.components.text(
|
|
{},
|
|
I18n.t('send_title') + ": "
|
|
+ status.localizeNumber(params.amount, context.delimiter, context.separator)
|
|
+ " ETH"
|
|
)
|
|
};
|
|
},
|
|
handler: sendTransaction,
|
|
validator: validateSend
|
|
};
|
|
|
|
status.command(send);
|
|
status.response(send);
|
|
|
|
status.command({
|
|
name: "request",
|
|
color: "#5fc48d",
|
|
title: I18n.t('request_title'),
|
|
description: I18n.t('request_description'),
|
|
sequentialParams: true,
|
|
params: [{
|
|
name: "amount",
|
|
type: status.types.NUMBER
|
|
}],
|
|
handler: function (params) {
|
|
return {
|
|
event: "request",
|
|
params: [params.amount],
|
|
request: {
|
|
command: "send",
|
|
params: {
|
|
amount: params.amount
|
|
}
|
|
}
|
|
};
|
|
},
|
|
preview: function (params, context) {
|
|
return {
|
|
markup: status.components.text(
|
|
{},
|
|
I18n.t('request_requesting') + " "
|
|
+ status.localizeNumber(params.amount, context.delimiter, context.separator)
|
|
+ " ETH"
|
|
)
|
|
};
|
|
},
|
|
shortPreview: function (params, context) {
|
|
return {
|
|
markup: status.components.text(
|
|
{},
|
|
I18n.t('request_requesting') + " "
|
|
+ status.localizeNumber(params.amount, context.delimiter, context.separator)
|
|
+ " ETH"
|
|
)
|
|
};
|
|
},
|
|
validator: function (params) {
|
|
try {
|
|
var val = web3.toWei(params.amount.replace(",", "."), "ether");
|
|
if (val <= 0) {
|
|
throw new Error();
|
|
}
|
|
} catch (err) {
|
|
return {
|
|
markup: status.components.validationMessage(
|
|
I18n.t('validation_title'),
|
|
I18n.t('validation_invalid_number')
|
|
)
|
|
};
|
|
}
|
|
}
|
|
});
|