@unilogin/sdk
Version:
SDK is a JS library, that communicates with relayer. SDK allows managing contract, by creating basic contract-calling messages.
86 lines • 3.52 kB
JavaScript
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
var __spread = (this && this.__spread) || function () {
for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
return ar;
};
Object.defineProperty(exports, "__esModule", { value: true });
var commons_1 = require("@unilogin/commons");
var reactive_properties_1 = require("reactive-properties");
var ethers_1 = require("ethers");
var IncomingTransactionObserver = /** @class */ (function () {
function IncomingTransactionObserver(notifySdk, address) {
var _this = this;
this.address = address;
this.transactions = new reactive_properties_1.State([]);
var transactionObserver = notifySdk.watchAccount(address);
transactionObserver.onPool(function (data) { return _this.handleEvent(data); });
transactionObserver.onSent(function (data) { return _this.handleEvent(data); });
transactionObserver.onConfirmed(function (data) { return _this.handleEvent(data); });
}
IncomingTransactionObserver.prototype.handleEvent = function (data) {
var transaction = tryExtractIncomingTransaction(data, this.address);
if (transaction) {
this.addTransaction(transaction);
}
};
IncomingTransactionObserver.prototype.addTransaction = function (transaction) {
if (this.transactions.get().every(function (tx) { return tx.transactionHash !== transaction.transactionHash; })) {
this.transactions.set(__spread(this.transactions.get(), [transaction]));
}
};
return IncomingTransactionObserver;
}());
exports.IncomingTransactionObserver = IncomingTransactionObserver;
function tryExtractIncomingTransaction(data, receiver) {
if (isEthTransferTo(receiver, data) &&
data.value &&
!isZero(data.value)) {
return {
transactionHash: data.hash,
value: commons_1.CurrencyValue.fromWei(data.value, commons_1.ETHER_NATIVE_TOKEN.address),
};
}
else if (isErc20TransferTo(receiver, data)) {
var value = commons_1.CurrencyValue.fromWei(data.contractCall.params['_value'], data.contractCall.contractAddress);
if (!value.isZero()) {
return {
transactionHash: data.hash,
value: value,
};
}
}
return undefined;
}
exports.tryExtractIncomingTransaction = tryExtractIncomingTransaction;
var isEthTransferTo = function (receiver, data) {
return data.asset === 'ETH' && data.to && addressEquals(data.to, receiver);
};
var isErc20TransferTo = function (receiver, data) {
return data.contractCall !== undefined &&
data.contractCall.contractType === 'erc20' &&
data.contractCall.methodName === 'transfer' &&
addressEquals(data.contractCall.params['_to'], receiver);
};
var addressEquals = function (a, b) {
return a.toLowerCase() === b.toLowerCase();
};
var isZero = function (val) {
return ethers_1.utils.bigNumberify(val).eq(0);
};
//# sourceMappingURL=IncomingTransactionObserver.js.map
;