Gonzalo Aune
4 years ago
27 changed files with 1238 additions and 10 deletions
@ -1 +1 @@ |
|||
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":"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"} |
|||
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":"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"} |
@ -1 +1 @@ |
|||
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":";;AAAA,MAAM,SAAS,GAAG;IAChB,cAAc,EAAE,CAAC;IACjB,eAAe,EAAE;QACf,SAAS,EAAE,CAAC;QACZ,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,CAAC;QACd,aAAa,EAAE,CAAC;QAChB,UAAU,EAAE,CAAC;QACb,SAAS,EAAE,CAAC;QACZ,iBAAiB,EAAE,CAAC;KACrB;IACD,gBAAgB,EAAE;QAChB,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,CAAC;KACf;IACD,QAAQ,EAAE;QACR,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,CAAC;QACd,WAAW,EAAE,CAAC;QACd,UAAU,EAAE,CAAC;QACb,QAAQ,EAAE,CAAC;QACX,SAAS,EAAE,CAAC;KACb;IACD,aAAa,EAAE;QACb,UAAU,EAAE,CAAC;QACb,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,CAAC;KACd;IACD,aAAa,EAAE;QACb,SAAS,EAAE,CAAC;QACZ,cAAc,EAAE,CAAC;QACjB,SAAS,EAAE,CAAC;QACZ,SAAS,EAAE,CAAC;QACZ,cAAc,EAAE,CAAC;QACjB,gBAAgB,EAAE,CAAC;QACnB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,CAAC;QACb,iBAAiB,EAAE,CAAC;QACpB,eAAe,EAAE,CAAC;QAClB,aAAa,EAAE,EAAE;QACjB,0BAA0B,EAAE,EAAE;QAC9B,cAAc,EAAE,EAAE;QAClB,cAAc,EAAE,EAAE;QAClB,YAAY,EAAE,EAAE;QAChB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,QAAQ,EAAE,EAAE;QACZ,WAAW,EAAE,EAAE;QACf,gBAAgB,EAAE,EAAE;QACpB,gBAAgB,EAAE,EAAE;QACpB,eAAe,EAAE,EAAE;QACnB,cAAc,EAAE,EAAE;QAClB,aAAa,EAAE,EAAE;QACjB,SAAS,EAAE,EAAE;QACb,SAAS,EAAE,EAAE;QACb,WAAW,EAAE,EAAE;QACf,wBAAwB,EAAE,EAAE;QAC5B,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,EAAE;KACZ;IACD,aAAa,EAAE;QACb,WAAW,EAAE,CAAC;QACd,MAAM,EAAE,CAAC;KACV;IACD,cAAc,EAAE;QACd,SAAS,EAAE,WAAW;QACtB,UAAU,EAAE,sBAAsB;QAClC,OAAO,EAAE,OAAO;QAChB,2BAA2B,EAAE,2BAA2B;QACxD,SAAS,EAAE,SAAS;KACrB;IACD,UAAU,EAAE;QACV,cAAc,EAAE,CAAC;QACjB,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;KACX;IACD,SAAS,EAAE;QACT,SAAS,EAAE,CAAC;QACZ,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE,CAAC;KACZ;IACD,UAAU,EAAE;QACV,GAAG,EAAE,CAAC;QACN,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;QACV,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,CAAC;QACX,QAAQ,EAAE,CAAC;KACZ;CACF,CAAA;AAED,kBAAe,SAAS,CAAA"} |
|||
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":";;AAAA,MAAM,SAAS,GAAG;IAChB,cAAc,EAAE,CAAC;IACjB,eAAe,EAAE;QACf,SAAS,EAAE,CAAC;QACZ,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,CAAC;QACd,aAAa,EAAE,CAAC;QAChB,UAAU,EAAE,CAAC;QACb,SAAS,EAAE,CAAC;QACZ,iBAAiB,EAAE,CAAC;KACrB;IACD,gBAAgB,EAAE;QAChB,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,CAAC;KACf;IACD,QAAQ,EAAE;QACR,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,CAAC;QACd,WAAW,EAAE,CAAC;QACd,UAAU,EAAE,CAAC;QACb,QAAQ,EAAE,CAAC;QACX,SAAS,EAAE,CAAC;KACb;IACD,aAAa,EAAE;QACb,UAAU,EAAE,CAAC;QACb,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,CAAC;KACd;IACD,aAAa,EAAE;QACb,SAAS,EAAE,CAAC;QACZ,cAAc,EAAE,CAAC;QACjB,SAAS,EAAE,CAAC;QACZ,SAAS,EAAE,CAAC;QACZ,cAAc,EAAE,CAAC;QACjB,gBAAgB,EAAE,CAAC;QACnB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,CAAC;QACb,iBAAiB,EAAE,CAAC;QACpB,eAAe,EAAE,CAAC;QAClB,aAAa,EAAE,EAAE;QACjB,0BAA0B,EAAE,EAAE;QAC9B,cAAc,EAAE,EAAE;QAClB,cAAc,EAAE,EAAE;QAClB,YAAY,EAAE,EAAE;QAChB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,QAAQ,EAAE,EAAE;QACZ,WAAW,EAAE,EAAE;QACf,gBAAgB,EAAE,EAAE;QACpB,gBAAgB,EAAE,EAAE;QACpB,eAAe,EAAE,EAAE;QACnB,cAAc,EAAE,EAAE;QAClB,aAAa,EAAE,EAAE;QACjB,SAAS,EAAE,EAAE;QACb,SAAS,EAAE,EAAE;QACb,WAAW,EAAE,EAAE;QACf,wBAAwB,EAAE,EAAE;QAC5B,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,EAAE;QACX,gBAAgB,EAAE,EAAE;KACrB;IACD,aAAa,EAAE;QACb,WAAW,EAAE,CAAC;QACd,MAAM,EAAE,CAAC;KACV;IACD,cAAc,EAAE;QACd,SAAS,EAAE,WAAW;QACtB,UAAU,EAAE,sBAAsB;QAClC,OAAO,EAAE,OAAO;QAChB,2BAA2B,EAAE,2BAA2B;QACxD,SAAS,EAAE,SAAS;KACrB;IACD,UAAU,EAAE;QACV,cAAc,EAAE,CAAC;QACjB,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;KACX;IACD,SAAS,EAAE;QACT,SAAS,EAAE,CAAC;QACZ,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE,CAAC;KACZ;IACD,UAAU,EAAE;QACV,GAAG,EAAE,CAAC;QACN,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;QACV,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,CAAC;QACX,QAAQ,EAAE,CAAC;KACZ;CACF,CAAA;AAED,kBAAe,SAAS,CAAA"} |
@ -0,0 +1,173 @@ |
|||
"use strict"; |
|||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { |
|||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } |
|||
return new (P || (P = Promise))(function (resolve, reject) { |
|||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } |
|||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } |
|||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } |
|||
step((generator = generator.apply(thisArg, _arguments || [])).next()); |
|||
}); |
|||
}; |
|||
Object.defineProperty(exports, "__esModule", { value: true }); |
|||
const res_1 = require("../utils/res"); |
|||
const models_1 = require("../models"); |
|||
const network = require("../network"); |
|||
const constants_1 = require("../constants"); |
|||
const short = require("short-uuid"); |
|||
const lightning = require("../utils/lightning"); |
|||
const wallet_1 = require("../utils/wallet"); |
|||
const jsonUtils = require("../utils/json"); |
|||
const sequelize_1 = require("sequelize"); |
|||
let queries = {}; |
|||
const hub_pubkey = '023d70f2f76d283c6c4e58109ee3a2816eb9d8feb40b23d62469060a2b2867b77f'; |
|||
function listUTXOs(req, res) { |
|||
return __awaiter(this, void 0, void 0, function* () { |
|||
try { |
|||
const utxos = yield wallet_1.listUnspent(); // at least 1 confg
|
|||
const addys = utxos.map(utxo => utxo.address); |
|||
const accountings = yield models_1.models.Accounting.findAll({ |
|||
where: { |
|||
onchain_address: { |
|||
[sequelize_1.Op.in]: addys |
|||
}, |
|||
status: constants_1.default.statuses.pending |
|||
} |
|||
}); |
|||
const ret = []; |
|||
accountings.forEach(a => { |
|||
const acc = Object.assign({}, a.dataValues); |
|||
const utxo = utxos.find(u => u.address === a.onchainAddress); |
|||
if (utxo) { |
|||
acc.amount = utxo.amount_sat; |
|||
acc.confirmations = utxo.confirmations; |
|||
ret.push(acc); |
|||
} |
|||
}); |
|||
res_1.success(res, ret.map(acc => jsonUtils.accountingToJson(acc))); |
|||
} |
|||
catch (e) { |
|||
res_1.failure(res, e); |
|||
} |
|||
}); |
|||
} |
|||
exports.listUTXOs = listUTXOs; |
|||
function queryOnchainAddress(req, res) { |
|||
return __awaiter(this, void 0, void 0, function* () { |
|||
console.log('=> queryOnchainAddress'); |
|||
const uuid = short.generate(); |
|||
const owner = yield models_1.models.Contact.findOne({ where: { isOwner: true } }); |
|||
const app = req.params.app; |
|||
const query = { |
|||
type: 'onchain_address', |
|||
uuid, |
|||
app |
|||
}; |
|||
const opts = { |
|||
amt: constants_1.default.min_sat_amount, |
|||
dest: hub_pubkey, |
|||
data: { |
|||
type: constants_1.default.message_types.query, |
|||
message: { |
|||
content: JSON.stringify(query) |
|||
}, |
|||
sender: { pub_key: owner.publicKey } |
|||
} |
|||
}; |
|||
try { |
|||
yield network.signAndSend(opts); |
|||
} |
|||
catch (e) { |
|||
res_1.failure(res, e); |
|||
return; |
|||
} |
|||
let i = 0; |
|||
let interval = setInterval(() => { |
|||
if (i >= 15) { |
|||
clearInterval(interval); |
|||
delete queries[uuid]; |
|||
res_1.failure(res, 'no response received'); |
|||
return; |
|||
} |
|||
if (queries[uuid]) { |
|||
res_1.success(res, queries[uuid].result); |
|||
clearInterval(interval); |
|||
delete queries[uuid]; |
|||
return; |
|||
} |
|||
i++; |
|||
}, 1000); |
|||
}); |
|||
} |
|||
exports.queryOnchainAddress = queryOnchainAddress; |
|||
exports.receiveQuery = (payload) => __awaiter(void 0, void 0, void 0, function* () { |
|||
const dat = payload.content || payload; |
|||
const sender_pub_key = dat.sender.pub_key; |
|||
const content = dat.message.content; |
|||
const owner = yield models_1.models.Contact.findOne({ where: { isOwner: true } }); |
|||
if (!sender_pub_key || !content || !owner) { |
|||
return console.log('=> wrong query format'); |
|||
} |
|||
let q; |
|||
try { |
|||
q = JSON.parse(content); |
|||
} |
|||
catch (e) { |
|||
console.log("=> ERROR receiveQuery,", e); |
|||
return; |
|||
} |
|||
console.log('=> query received', q); |
|||
let result = ''; |
|||
switch (q.type) { |
|||
case 'onchain_address': |
|||
const addy = yield lightning.newAddress(lightning.NESTED_PUBKEY_HASH); |
|||
const acc = { |
|||
date: new Date(), |
|||
pubkey: sender_pub_key, |
|||
onchainAddress: addy, |
|||
amount: 0, |
|||
sourceApp: q.app, |
|||
status: constants_1.default.statuses.pending, |
|||
error: '', |
|||
}; |
|||
yield models_1.models.Accounting.create(acc); |
|||
result = addy; |
|||
} |
|||
const ret = { |
|||
type: q.type, |
|||
uuid: q.uuid, |
|||
app: q.app, |
|||
result, |
|||
}; |
|||
const opts = { |
|||
amt: constants_1.default.min_sat_amount, |
|||
dest: sender_pub_key, |
|||
data: { |
|||
type: constants_1.default.message_types.query_response, |
|||
message: { |
|||
content: JSON.stringify(ret) |
|||
}, |
|||
sender: { pub_key: owner.publicKey } |
|||
} |
|||
}; |
|||
try { |
|||
yield network.signAndSend(opts); |
|||
} |
|||
catch (e) { |
|||
console.log("FAILED TO SEND QUERY_RESPONSE"); |
|||
return; |
|||
} |
|||
}); |
|||
exports.receiveQueryResponse = (payload) => __awaiter(void 0, void 0, void 0, function* () { |
|||
console.log('=> receiveQueryResponse'); |
|||
const dat = payload.content || payload; |
|||
// const sender_pub_key = dat.sender.pub_key
|
|||
const content = dat.message.content; |
|||
try { |
|||
const q = JSON.parse(content); |
|||
queries[q.uuid] = q; |
|||
} |
|||
catch (e) { |
|||
console.log("=> ERROR receiveQueryResponse,", e); |
|||
} |
|||
}); |
|||
//# sourceMappingURL=queries.js.map
|
@ -0,0 +1 @@ |
|||
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../src/controllers/queries.ts"],"names":[],"mappings":"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"} |
@ -1 +1 @@ |
|||
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/models/index.ts"],"names":[],"mappings":";;AAAA,+DAAiD;AACjD,6BAA4B;AAC5B,oCAA4B;AAC5B,0CAAkC;AAClC,wCAAgC;AAChC,0CAAkC;AAClC,oDAA4C;AAC5C,4CAAoC;AACpC,gDAAwC;AACxC,sCAA8B;AAC9B,kCAA0B;AAC1B,0CAAkC;AAClC,8CAAsC;AAEtC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa,CAAC;AAClD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;AAE7E,MAAM,SAAS,GAAG,IAAI,gCAAS,iCAC1B,MAAM,KACT,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAC7D,MAAM,EAAE,CAAC,cAAI,EAAE,iBAAO,EAAE,gBAAM,EAAE,iBAAO,EAAE,sBAAY,EAAE,kBAAQ,EAAE,oBAAU,EAAE,eAAK,EAAE,aAAG,EAAE,iBAAO,EAAE,mBAAS,CAAC,IAC5G,CAAA;AAIA,8BAAS;AAHX,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAA;AAI7B,wBAAM"} |
|||
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/models/index.ts"],"names":[],"mappings":";;AAAA,+DAAiD;AACjD,6BAA4B;AAC5B,oCAA4B;AAC5B,0CAAkC;AAClC,wCAAgC;AAChC,0CAAkC;AAClC,oDAA4C;AAC5C,4CAAoC;AACpC,gDAAwC;AACxC,sCAA8B;AAC9B,kCAA0B;AAC1B,0CAAkC;AAClC,8CAAsC;AACtC,gDAAwC;AAExC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa,CAAC;AAClD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;AAE7E,MAAM,SAAS,GAAG,IAAI,gCAAS,iCAC1B,MAAM,KACT,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAC7D,MAAM,EAAE,CAAC,cAAI,EAAE,iBAAO,EAAE,gBAAM,EAAE,iBAAO,EAAE,sBAAY,EAAE,kBAAQ,EAAE,oBAAU,EAAE,eAAK,EAAE,aAAG,EAAE,iBAAO,EAAE,mBAAS,EAAE,oBAAU,CAAC,IACxH,CAAA;AAIA,8BAAS;AAHX,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAA;AAI7B,wBAAM"} |
@ -0,0 +1,60 @@ |
|||
"use strict"; |
|||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { |
|||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; |
|||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); |
|||
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; |
|||
return c > 3 && r && Object.defineProperty(target, key, r), r; |
|||
}; |
|||
var __metadata = (this && this.__metadata) || function (k, v) { |
|||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); |
|||
}; |
|||
Object.defineProperty(exports, "__esModule", { value: true }); |
|||
const sequelize_typescript_1 = require("sequelize-typescript"); |
|||
let Accounting = class Accounting extends sequelize_typescript_1.Model { |
|||
}; |
|||
__decorate([ |
|||
sequelize_typescript_1.Column({ |
|||
type: sequelize_typescript_1.DataType.BIGINT, |
|||
primaryKey: true, |
|||
unique: true, |
|||
autoIncrement: true |
|||
}), |
|||
__metadata("design:type", Number) |
|||
], Accounting.prototype, "id", void 0); |
|||
__decorate([ |
|||
sequelize_typescript_1.Column, |
|||
__metadata("design:type", Date) |
|||
], Accounting.prototype, "date", void 0); |
|||
__decorate([ |
|||
sequelize_typescript_1.Column, |
|||
__metadata("design:type", String) |
|||
], Accounting.prototype, "pubkey", void 0); |
|||
__decorate([ |
|||
sequelize_typescript_1.Column, |
|||
__metadata("design:type", String) |
|||
], Accounting.prototype, "onchainAddress", void 0); |
|||
__decorate([ |
|||
sequelize_typescript_1.Column(sequelize_typescript_1.DataType.DECIMAL), |
|||
__metadata("design:type", Number) |
|||
], Accounting.prototype, "amount", void 0); |
|||
__decorate([ |
|||
sequelize_typescript_1.Column, |
|||
__metadata("design:type", String) |
|||
], Accounting.prototype, "sourceApp", void 0); |
|||
__decorate([ |
|||
sequelize_typescript_1.Column(sequelize_typescript_1.DataType.BIGINT), |
|||
__metadata("design:type", Number) |
|||
], Accounting.prototype, "status", void 0); |
|||
__decorate([ |
|||
sequelize_typescript_1.Column, |
|||
__metadata("design:type", String) |
|||
], Accounting.prototype, "error", void 0); |
|||
__decorate([ |
|||
sequelize_typescript_1.Column(sequelize_typescript_1.DataType.BIGINT), |
|||
__metadata("design:type", Number) |
|||
], Accounting.prototype, "chanId", void 0); |
|||
Accounting = __decorate([ |
|||
sequelize_typescript_1.Table({ tableName: 'sphinx_accountings', underscored: true }) |
|||
], Accounting); |
|||
exports.default = Accounting; |
|||
//# sourceMappingURL=accounting.js.map
|
@ -0,0 +1 @@ |
|||
{"version":3,"file":"accounting.js","sourceRoot":"","sources":["../../../../src/models/ts/accounting.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,+DAAsE;AAGtE,IAAqB,UAAU,GAA/B,MAAqB,UAAW,SAAQ,4BAAiB;CAkCxD,CAAA;AA1BC;IANC,6BAAM,CAAC;QACN,IAAI,EAAE,+BAAQ,CAAC,MAAM;QACrB,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,IAAI;QACZ,aAAa,EAAE,IAAI;KACpB,CAAC;;sCACQ;AAGV;IADC,6BAAM;8BACD,IAAI;wCAAA;AAGV;IADC,6BAAM;;0CACO;AAGd;IADC,6BAAM;;kDACe;AAGtB;IADC,6BAAM,CAAC,+BAAQ,CAAC,OAAO,CAAC;;0CACX;AAGd;IADC,6BAAM;;6CACU;AAGjB;IADC,6BAAM,CAAC,+BAAQ,CAAC,MAAM,CAAC;;0CACV;AAGd;IADC,6BAAM;;yCACM;AAGb;IADC,6BAAM,CAAC,+BAAQ,CAAC,MAAM,CAAC;;0CACV;AAhCK,UAAU;IAD9B,4BAAK,CAAC,EAAE,SAAS,EAAE,oBAAoB,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;GACzC,UAAU,CAkC9B;kBAlCoB,UAAU"} |
@ -1 +1 @@ |
|||
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../../src/utils/json.ts"],"names":[],"mappings":"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"} |
|||
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../../src/utils/json.ts"],"names":[],"mappings":"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"} |
File diff suppressed because one or more lines are too long
@ -0,0 +1,57 @@ |
|||
"use strict"; |
|||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { |
|||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } |
|||
return new (P || (P = Promise))(function (resolve, reject) { |
|||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } |
|||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } |
|||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } |
|||
step((generator = generator.apply(thisArg, _arguments || [])).next()); |
|||
}); |
|||
}; |
|||
Object.defineProperty(exports, "__esModule", { value: true }); |
|||
const grpc = require("grpc"); |
|||
const lightning_1 = require("./lightning"); |
|||
const config_1 = require("./config"); |
|||
const config = config_1.loadConfig(); |
|||
const LND_IP = config.lnd_ip || 'localhost'; |
|||
let walletClient; |
|||
exports.loadWalletKit = () => { |
|||
if (walletClient) { |
|||
return walletClient; |
|||
} |
|||
else { |
|||
try { |
|||
var credentials = lightning_1.loadCredentials(); |
|||
var lnrpcDescriptor = grpc.load("proto/walletkit.proto"); |
|||
var walletkit = lnrpcDescriptor.walletrpc; |
|||
walletClient = new walletkit.WalletKit(LND_IP + ':' + config.lnd_port, credentials); |
|||
return walletClient; |
|||
} |
|||
catch (e) { |
|||
throw e; |
|||
} |
|||
} |
|||
}; |
|||
function listUnspent() { |
|||
return __awaiter(this, void 0, void 0, function* () { |
|||
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { |
|||
let walletkit = yield exports.loadWalletKit(); |
|||
try { |
|||
const opts = { min_confs: 0, max_confs: 10000 }; |
|||
walletkit.listUnspent(opts, function (err, res) { |
|||
if (err || !(res && res.utxos)) { |
|||
reject(err); |
|||
} |
|||
else { |
|||
resolve(res.utxos); |
|||
} |
|||
}); |
|||
} |
|||
catch (e) { |
|||
reject(e); |
|||
} |
|||
})); |
|||
}); |
|||
} |
|||
exports.listUnspent = listUnspent; |
|||
//# sourceMappingURL=wallet.js.map
|
@ -0,0 +1 @@ |
|||
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../../src/utils/wallet.ts"],"names":[],"mappings":";;;;;;;;;;;AAEA,6BAA4B;AAC5B,2CAA6C;AAC7C,qCAAmC;AAEnC,MAAM,MAAM,GAAG,mBAAU,EAAE,CAAA;AAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,WAAW,CAAA;AAE3C,IAAI,YAAY,CAAA;AAEH,QAAA,aAAa,GAAG,GAAG,EAAE;IAChC,IAAI,YAAY,EAAE;QAChB,OAAO,YAAY,CAAA;KACpB;SAAM;QACL,IAAI;YACF,IAAI,WAAW,GAAG,2BAAe,EAAE,CAAA;YACnC,IAAI,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACzD,IAAI,SAAS,GAAQ,eAAe,CAAC,SAAS,CAAA;YAC9C,YAAY,GAAG,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YACpF,OAAO,YAAY,CAAA;SACpB;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,CAAC,CAAA;SACR;KACF;AACH,CAAC,CAAA;AAUD,SAAsB,WAAW;;QAC/B,OAAO,IAAI,OAAO,CAAC,CAAO,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,IAAI,SAAS,GAAG,MAAM,qBAAa,EAAE,CAAA;YACrC,IAAI;gBACF,MAAM,IAAI,GAAG,EAAC,SAAS,EAAC,CAAC,EAAC,SAAS,EAAC,KAAK,EAAC,CAAA;gBAC1C,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,UAAS,GAAG,EAAE,GAAG;oBAC3C,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,IAAE,GAAG,CAAC,KAAK,CAAC,EAAE;wBAC5B,MAAM,CAAC,GAAG,CAAC,CAAA;qBACZ;yBAAM;wBACL,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;qBACnB;gBACH,CAAC,CAAC,CAAA;aACH;YAAC,OAAM,CAAC,EAAE;gBACT,MAAM,CAAC,CAAC,CAAC,CAAA;aACV;QACH,CAAC,CAAA,CAAC,CAAA;IACJ,CAAC;CAAA;AAhBD,kCAgBC"} |
@ -0,0 +1,601 @@ |
|||
syntax = "proto3"; |
|||
|
|||
import "rpc.proto"; |
|||
import "signer.proto"; |
|||
|
|||
package walletrpc; |
|||
|
|||
option go_package = "github.com/lightningnetwork/lnd/lnrpc/walletrpc"; |
|||
|
|||
// WalletKit is a service that gives access to the core functionalities of the |
|||
// daemon's wallet. |
|||
service WalletKit { |
|||
/* |
|||
ListUnspent returns a list of all utxos spendable by the wallet with a |
|||
number of confirmations between the specified minimum and maximum. |
|||
*/ |
|||
rpc ListUnspent (ListUnspentRequest) returns (ListUnspentResponse); |
|||
|
|||
/* |
|||
LeaseOutput locks an output to the given ID, preventing it from being |
|||
available for any future coin selection attempts. The absolute time of the |
|||
lock's expiration is returned. The expiration of the lock can be extended by |
|||
successive invocations of this RPC. Outputs can be unlocked before their |
|||
expiration through `ReleaseOutput`. |
|||
*/ |
|||
rpc LeaseOutput (LeaseOutputRequest) returns (LeaseOutputResponse); |
|||
|
|||
/* |
|||
ReleaseOutput unlocks an output, allowing it to be available for coin |
|||
selection if it remains unspent. The ID should match the one used to |
|||
originally lock the output. |
|||
*/ |
|||
rpc ReleaseOutput (ReleaseOutputRequest) returns (ReleaseOutputResponse); |
|||
|
|||
/* |
|||
DeriveNextKey attempts to derive the *next* key within the key family |
|||
(account in BIP43) specified. This method should return the next external |
|||
child within this branch. |
|||
*/ |
|||
rpc DeriveNextKey (KeyReq) returns (signrpc.KeyDescriptor); |
|||
|
|||
/* |
|||
DeriveKey attempts to derive an arbitrary key specified by the passed |
|||
KeyLocator. |
|||
*/ |
|||
rpc DeriveKey (signrpc.KeyLocator) returns (signrpc.KeyDescriptor); |
|||
|
|||
/* |
|||
NextAddr returns the next unused address within the wallet. |
|||
*/ |
|||
rpc NextAddr (AddrRequest) returns (AddrResponse); |
|||
|
|||
/* |
|||
PublishTransaction attempts to publish the passed transaction to the |
|||
network. Once this returns without an error, the wallet will continually |
|||
attempt to re-broadcast the transaction on start up, until it enters the |
|||
chain. |
|||
*/ |
|||
rpc PublishTransaction (Transaction) returns (PublishResponse); |
|||
|
|||
/* |
|||
SendOutputs is similar to the existing sendmany call in Bitcoind, and |
|||
allows the caller to create a transaction that sends to several outputs at |
|||
once. This is ideal when wanting to batch create a set of transactions. |
|||
*/ |
|||
rpc SendOutputs (SendOutputsRequest) returns (SendOutputsResponse); |
|||
|
|||
/* |
|||
EstimateFee attempts to query the internal fee estimator of the wallet to |
|||
determine the fee (in sat/kw) to attach to a transaction in order to |
|||
achieve the confirmation target. |
|||
*/ |
|||
rpc EstimateFee (EstimateFeeRequest) returns (EstimateFeeResponse); |
|||
|
|||
/* |
|||
PendingSweeps returns lists of on-chain outputs that lnd is currently |
|||
attempting to sweep within its central batching engine. Outputs with similar |
|||
fee rates are batched together in order to sweep them within a single |
|||
transaction. |
|||
|
|||
NOTE: Some of the fields within PendingSweepsRequest are not guaranteed to |
|||
remain supported. This is an advanced API that depends on the internals of |
|||
the UtxoSweeper, so things may change. |
|||
*/ |
|||
rpc PendingSweeps (PendingSweepsRequest) returns (PendingSweepsResponse); |
|||
|
|||
/* |
|||
BumpFee bumps the fee of an arbitrary input within a transaction. This RPC |
|||
takes a different approach than bitcoind's bumpfee command. lnd has a |
|||
central batching engine in which inputs with similar fee rates are batched |
|||
together to save on transaction fees. Due to this, we cannot rely on |
|||
bumping the fee on a specific transaction, since transactions can change at |
|||
any point with the addition of new inputs. The list of inputs that |
|||
currently exist within lnd's central batching engine can be retrieved |
|||
through the PendingSweeps RPC. |
|||
|
|||
When bumping the fee of an input that currently exists within lnd's central |
|||
batching engine, a higher fee transaction will be created that replaces the |
|||
lower fee transaction through the Replace-By-Fee (RBF) policy. If it |
|||
|
|||
This RPC also serves useful when wanting to perform a Child-Pays-For-Parent |
|||
(CPFP), where the child transaction pays for its parent's fee. This can be |
|||
done by specifying an outpoint within the low fee transaction that is under |
|||
the control of the wallet. |
|||
|
|||
The fee preference can be expressed either as a specific fee rate or a delta |
|||
of blocks in which the output should be swept on-chain within. If a fee |
|||
preference is not explicitly specified, then an error is returned. |
|||
|
|||
Note that this RPC currently doesn't perform any validation checks on the |
|||
fee preference being provided. For now, the responsibility of ensuring that |
|||
the new fee preference is sufficient is delegated to the user. |
|||
*/ |
|||
rpc BumpFee (BumpFeeRequest) returns (BumpFeeResponse); |
|||
|
|||
/* |
|||
ListSweeps returns a list of the sweep transactions our node has produced. |
|||
Note that these sweeps may not be confirmed yet, as we record sweeps on |
|||
broadcast, not confirmation. |
|||
*/ |
|||
rpc ListSweeps (ListSweepsRequest) returns (ListSweepsResponse); |
|||
|
|||
/* |
|||
LabelTransaction adds a label to a transaction. If the transaction already |
|||
has a label the call will fail unless the overwrite bool is set. This will |
|||
overwrite the exiting transaction label. Labels must not be empty, and |
|||
cannot exceed 500 characters. |
|||
*/ |
|||
rpc LabelTransaction (LabelTransactionRequest) |
|||
returns (LabelTransactionResponse); |
|||
|
|||
/* |
|||
FundPsbt creates a fully populated PSBT that contains enough inputs to fund |
|||
the outputs specified in the template. There are two ways of specifying a |
|||
template: Either by passing in a PSBT with at least one output declared or |
|||
by passing in a raw TxTemplate message. |
|||
|
|||
If there are no inputs specified in the template, coin selection is |
|||
performed automatically. If the template does contain any inputs, it is |
|||
assumed that full coin selection happened externally and no additional |
|||
inputs are added. If the specified inputs aren't enough to fund the outputs |
|||
with the given fee rate, an error is returned. |
|||
|
|||
After either selecting or verifying the inputs, all input UTXOs are locked |
|||
with an internal app ID. |
|||
|
|||
NOTE: If this method returns without an error, it is the caller's |
|||
responsibility to either spend the locked UTXOs (by finalizing and then |
|||
publishing the transaction) or to unlock/release the locked UTXOs in case of |
|||
an error on the caller's side. |
|||
*/ |
|||
rpc FundPsbt (FundPsbtRequest) returns (FundPsbtResponse); |
|||
|
|||
/* |
|||
FinalizePsbt expects a partial transaction with all inputs and outputs fully |
|||
declared and tries to sign all inputs that belong to the wallet. Lnd must be |
|||
the last signer of the transaction. That means, if there are any unsigned |
|||
non-witness inputs or inputs without UTXO information attached or inputs |
|||
without witness data that do not belong to lnd's wallet, this method will |
|||
fail. If no error is returned, the PSBT is ready to be extracted and the |
|||
final TX within to be broadcast. |
|||
|
|||
NOTE: This method does NOT publish the transaction once finalized. It is the |
|||
caller's responsibility to either publish the transaction on success or |
|||
unlock/release any locked UTXOs in case of an error in this method. |
|||
*/ |
|||
rpc FinalizePsbt (FinalizePsbtRequest) returns (FinalizePsbtResponse); |
|||
} |
|||
|
|||
message ListUnspentRequest { |
|||
// The minimum number of confirmations to be included. |
|||
int32 min_confs = 1; |
|||
|
|||
// The maximum number of confirmations to be included. |
|||
int32 max_confs = 2; |
|||
} |
|||
|
|||
message ListUnspentResponse { |
|||
// A list of utxos satisfying the specified number of confirmations. |
|||
repeated lnrpc.Utxo utxos = 1; |
|||
} |
|||
|
|||
message LeaseOutputRequest { |
|||
/* |
|||
An ID of 32 random bytes that must be unique for each distinct application |
|||
using this RPC which will be used to bound the output lease to. |
|||
*/ |
|||
bytes id = 1; |
|||
|
|||
// The identifying outpoint of the output being leased. |
|||
lnrpc.OutPoint outpoint = 2; |
|||
} |
|||
|
|||
message LeaseOutputResponse { |
|||
/* |
|||
The absolute expiration of the output lease represented as a unix timestamp. |
|||
*/ |
|||
uint64 expiration = 1; |
|||
} |
|||
|
|||
message ReleaseOutputRequest { |
|||
// The unique ID that was used to lock the output. |
|||
bytes id = 1; |
|||
|
|||
// The identifying outpoint of the output being released. |
|||
lnrpc.OutPoint outpoint = 2; |
|||
} |
|||
|
|||
message ReleaseOutputResponse { |
|||
} |
|||
|
|||
message KeyReq { |
|||
/* |
|||
Is the key finger print of the root pubkey that this request is targeting. |
|||
This allows the WalletKit to possibly serve out keys for multiple HD chains |
|||
via public derivation. |
|||
*/ |
|||
int32 key_finger_print = 1; |
|||
|
|||
/* |
|||
The target key family to derive a key from. In other contexts, this is |
|||
known as the "account". |
|||
*/ |
|||
int32 key_family = 2; |
|||
} |
|||
|
|||
message AddrRequest { |
|||
// No fields, as we always give out a p2wkh address. |
|||
} |
|||
message AddrResponse { |
|||
/* |
|||
The address encoded using a bech32 format. |
|||
*/ |
|||
string addr = 1; |
|||
} |
|||
|
|||
message Transaction { |
|||
/* |
|||
The raw serialized transaction. |
|||
*/ |
|||
bytes tx_hex = 1; |
|||
|
|||
/* |
|||
An optional label to save with the transaction. Limited to 500 characters. |
|||
*/ |
|||
string label = 2; |
|||
} |
|||
message PublishResponse { |
|||
/* |
|||
If blank, then no error occurred and the transaction was successfully |
|||
published. If not the empty string, then a string representation of the |
|||
broadcast error. |
|||
|
|||
TODO(roasbeef): map to a proper enum type |
|||
*/ |
|||
string publish_error = 1; |
|||
} |
|||
|
|||
message SendOutputsRequest { |
|||
/* |
|||
The number of satoshis per kilo weight that should be used when crafting |
|||
this transaction. |
|||
*/ |
|||
int64 sat_per_kw = 1; |
|||
|
|||
/* |
|||
A slice of the outputs that should be created in the transaction produced. |
|||
*/ |
|||
repeated signrpc.TxOut outputs = 2; |
|||
|
|||
// An optional label for the transaction, limited to 500 characters. |
|||
string label = 3; |
|||
|
|||
// The minimum number of confirmations each one of your outputs used for |
|||
// the transaction must satisfy. |
|||
int32 min_confs = 4; |
|||
|
|||
// Whether unconfirmed outputs should be used as inputs for the transaction. |
|||
bool spend_unconfirmed = 5; |
|||
} |
|||
message SendOutputsResponse { |
|||
/* |
|||
The serialized transaction sent out on the network. |
|||
*/ |
|||
bytes raw_tx = 1; |
|||
} |
|||
|
|||
message EstimateFeeRequest { |
|||
/* |
|||
The number of confirmations to shoot for when estimating the fee. |
|||
*/ |
|||
int32 conf_target = 1; |
|||
} |
|||
message EstimateFeeResponse { |
|||
/* |
|||
The amount of satoshis per kw that should be used in order to reach the |
|||
confirmation target in the request. |
|||
*/ |
|||
int64 sat_per_kw = 1; |
|||
} |
|||
|
|||
enum WitnessType { |
|||
UNKNOWN_WITNESS = 0; |
|||
|
|||
/* |
|||
A witness that allows us to spend the output of a commitment transaction |
|||
after a relative lock-time lockout. |
|||
*/ |
|||
COMMITMENT_TIME_LOCK = 1; |
|||
|
|||
/* |
|||
A witness that allows us to spend a settled no-delay output immediately on a |
|||
counterparty's commitment transaction. |
|||
*/ |
|||
COMMITMENT_NO_DELAY = 2; |
|||
|
|||
/* |
|||
A witness that allows us to sweep the settled output of a malicious |
|||
counterparty's who broadcasts a revoked commitment transaction. |
|||
*/ |
|||
COMMITMENT_REVOKE = 3; |
|||
|
|||
/* |
|||
A witness that allows us to sweep an HTLC which we offered to the remote |
|||
party in the case that they broadcast a revoked commitment state. |
|||
*/ |
|||
HTLC_OFFERED_REVOKE = 4; |
|||
|
|||
/* |
|||
A witness that allows us to sweep an HTLC output sent to us in the case that |
|||
the remote party broadcasts a revoked commitment state. |
|||
*/ |
|||
HTLC_ACCEPTED_REVOKE = 5; |
|||
|
|||
/* |
|||
A witness that allows us to sweep an HTLC output that we extended to a |
|||
party, but was never fulfilled. This HTLC output isn't directly on the |
|||
commitment transaction, but is the result of a confirmed second-level HTLC |
|||
transaction. As a result, we can only spend this after a CSV delay. |
|||
*/ |
|||
HTLC_OFFERED_TIMEOUT_SECOND_LEVEL = 6; |
|||
|
|||
/* |
|||
A witness that allows us to sweep an HTLC output that was offered to us, and |
|||
for which we have a payment preimage. This HTLC output isn't directly on our |
|||
commitment transaction, but is the result of confirmed second-level HTLC |
|||
transaction. As a result, we can only spend this after a CSV delay. |
|||
*/ |
|||
HTLC_ACCEPTED_SUCCESS_SECOND_LEVEL = 7; |
|||
|
|||
/* |
|||
A witness that allows us to sweep an HTLC that we offered to the remote |
|||
party which lies in the commitment transaction of the remote party. We can |
|||
spend this output after the absolute CLTV timeout of the HTLC as passed. |
|||
*/ |
|||
HTLC_OFFERED_REMOTE_TIMEOUT = 8; |
|||
|
|||
/* |
|||
A witness that allows us to sweep an HTLC that was offered to us by the |
|||
remote party. We use this witness in the case that the remote party goes to |
|||
chain, and we know the pre-image to the HTLC. We can sweep this without any |
|||
additional timeout. |
|||
*/ |
|||
HTLC_ACCEPTED_REMOTE_SUCCESS = 9; |
|||
|
|||
/* |
|||
A witness that allows us to sweep an HTLC from the remote party's commitment |
|||
transaction in the case that the broadcast a revoked commitment, but then |
|||
also immediately attempt to go to the second level to claim the HTLC. |
|||
*/ |
|||
HTLC_SECOND_LEVEL_REVOKE = 10; |
|||
|
|||
/* |
|||
A witness type that allows us to spend a regular p2wkh output that's sent to |
|||
an output which is under complete control of the backing wallet. |
|||
*/ |
|||
WITNESS_KEY_HASH = 11; |
|||
|
|||
/* |
|||
A witness type that allows us to sweep an output that sends to a nested P2SH |
|||
script that pays to a key solely under our control. |
|||
*/ |
|||
NESTED_WITNESS_KEY_HASH = 12; |
|||
|
|||
/* |
|||
A witness type that allows us to spend our anchor on the commitment |
|||
transaction. |
|||
*/ |
|||
COMMITMENT_ANCHOR = 13; |
|||
} |
|||
|
|||
message PendingSweep { |
|||
// The outpoint of the output we're attempting to sweep. |
|||
lnrpc.OutPoint outpoint = 1; |
|||
|
|||
// The witness type of the output we're attempting to sweep. |
|||
WitnessType witness_type = 2; |
|||
|
|||
// The value of the output we're attempting to sweep. |
|||
uint32 amount_sat = 3; |
|||
|
|||
/* |
|||
The fee rate we'll use to sweep the output. The fee rate is only determined |
|||
once a sweeping transaction for the output is created, so it's possible for |
|||
this to be 0 before this. |
|||
*/ |
|||
uint32 sat_per_byte = 4; |
|||
|
|||
// The number of broadcast attempts we've made to sweep the output. |
|||
uint32 broadcast_attempts = 5; |
|||
|
|||
/* |
|||
The next height of the chain at which we'll attempt to broadcast the |
|||
sweep transaction of the output. |
|||
*/ |
|||
uint32 next_broadcast_height = 6; |
|||
|
|||
// The requested confirmation target for this output. |
|||
uint32 requested_conf_target = 8; |
|||
|
|||
// The requested fee rate, expressed in sat/byte, for this output. |
|||
uint32 requested_sat_per_byte = 9; |
|||
|
|||
/* |
|||
Whether this input must be force-swept. This means that it is swept even |
|||
if it has a negative yield. |
|||
*/ |
|||
bool force = 7; |
|||
} |
|||
|
|||
message PendingSweepsRequest { |
|||
} |
|||
|
|||
message PendingSweepsResponse { |
|||
/* |
|||
The set of outputs currently being swept by lnd's central batching engine. |
|||
*/ |
|||
repeated PendingSweep pending_sweeps = 1; |
|||
} |
|||
|
|||
message BumpFeeRequest { |
|||
// The input we're attempting to bump the fee of. |
|||
lnrpc.OutPoint outpoint = 1; |
|||
|
|||
// The target number of blocks that the input should be spent within. |
|||
uint32 target_conf = 2; |
|||
|
|||
/* |
|||
The fee rate, expressed in sat/byte, that should be used to spend the input |
|||
with. |
|||
*/ |
|||
uint32 sat_per_byte = 3; |
|||
|
|||
/* |
|||
Whether this input must be force-swept. This means that it is swept even |
|||
if it has a negative yield. |
|||
*/ |
|||
bool force = 4; |
|||
} |
|||
|
|||
message BumpFeeResponse { |
|||
} |
|||
|
|||
message ListSweepsRequest { |
|||
/* |
|||
Retrieve the full sweep transaction details. If false, only the sweep txids |
|||
will be returned. Note that some sweeps that LND publishes will have been |
|||
replaced-by-fee, so will not be included in this output. |
|||
*/ |
|||
bool verbose = 1; |
|||
} |
|||
|
|||
message ListSweepsResponse { |
|||
message TransactionIDs { |
|||
/* |
|||
Reversed, hex-encoded string representing the transaction ids of the |
|||
sweeps that our node has broadcast. Note that these transactions may |
|||
not have confirmed yet, we record sweeps on broadcast, not confirmation. |
|||
*/ |
|||
repeated string transaction_ids = 1; |
|||
} |
|||
|
|||
oneof sweeps { |
|||
lnrpc.TransactionDetails transaction_details = 1; |
|||
TransactionIDs transaction_ids = 2; |
|||
} |
|||
} |
|||
|
|||
message LabelTransactionRequest { |
|||
// The txid of the transaction to label. |
|||
bytes txid = 1; |
|||
|
|||
// The label to add to the transaction, limited to 500 characters. |
|||
string label = 2; |
|||
|
|||
// Whether to overwrite the existing label, if it is present. |
|||
bool overwrite = 3; |
|||
} |
|||
|
|||
message LabelTransactionResponse { |
|||
} |
|||
|
|||
message FundPsbtRequest { |
|||
oneof template { |
|||
/* |
|||
Use an existing PSBT packet as the template for the funded PSBT. |
|||
|
|||
The packet must contain at least one non-dust output. If one or more |
|||
inputs are specified, no coin selection is performed. In that case every |
|||
input must be an UTXO known to the wallet that has not been locked |
|||
before. The sum of all inputs must be sufficiently greater than the sum |
|||
of all outputs to pay a miner fee with the specified fee rate. A change |
|||
output is added to the PSBT if necessary. |
|||
*/ |
|||
bytes psbt = 1; |
|||
|
|||
/* |
|||
Use the outputs and optional inputs from this raw template. |
|||
*/ |
|||
TxTemplate raw = 2; |
|||
} |
|||
|
|||
oneof fees { |
|||
/* |
|||
The target number of blocks that the transaction should be confirmed in. |
|||
*/ |
|||
uint32 target_conf = 3; |
|||
|
|||
/* |
|||
The fee rate, expressed in sat/vbyte, that should be used to spend the |
|||
input with. |
|||
*/ |
|||
uint32 sat_per_vbyte = 4; |
|||
} |
|||
} |
|||
message FundPsbtResponse { |
|||
/* |
|||
The funded but not yet signed PSBT packet. |
|||
*/ |
|||
bytes funded_psbt = 1; |
|||
|
|||
/* |
|||
The index of the added change output or -1 if no change was left over. |
|||
*/ |
|||
int32 change_output_index = 2; |
|||
|
|||
/* |
|||
The list of lock leases that were acquired for the inputs in the funded PSBT |
|||
packet. |
|||
*/ |
|||
repeated UtxoLease locked_utxos = 3; |
|||
} |
|||
|
|||
message TxTemplate { |
|||
/* |
|||
An optional list of inputs to use. Every input must be an UTXO known to the |
|||
wallet that has not been locked before. The sum of all inputs must be |
|||
sufficiently greater than the sum of all outputs to pay a miner fee with the |
|||
fee rate specified in the parent message. |
|||
|
|||
If no inputs are specified, coin selection will be performed instead and |
|||
inputs of sufficient value will be added to the resulting PSBT. |
|||
*/ |
|||
repeated lnrpc.OutPoint inputs = 1; |
|||
|
|||
/* |
|||
A map of all addresses and the amounts to send to in the funded PSBT. |
|||
*/ |
|||
map<string, uint64> outputs = 2; |
|||
} |
|||
|
|||
message UtxoLease { |
|||
/* |
|||
A 32 byte random ID that identifies the lease. |
|||
*/ |
|||
bytes id = 1; |
|||
|
|||
// The identifying outpoint of the output being leased. |
|||
lnrpc.OutPoint outpoint = 2; |
|||
|
|||
/* |
|||
The absolute expiration of the output lease represented as a unix timestamp. |
|||
*/ |
|||
uint64 expiration = 3; |
|||
} |
|||
|
|||
message FinalizePsbtRequest { |
|||
/* |
|||
A PSBT that should be signed and finalized. The PSBT must contain all |
|||
required inputs, outputs, UTXO data and partial signatures of all other |
|||
signers. |
|||
*/ |
|||
bytes funded_psbt = 1; |
|||
} |
|||
message FinalizePsbtResponse { |
|||
// The fully signed and finalized transaction in PSBT format. |
|||
bytes signed_psbt = 1; |
|||
|
|||
// The fully signed and finalized transaction in the raw wire format. |
|||
bytes raw_final_tx = 2; |
|||
} |
@ -0,0 +1,171 @@ |
|||
import { success, failure } from '../utils/res' |
|||
import { models } from '../models' |
|||
import * as network from '../network' |
|||
import constants from '../constants' |
|||
import * as short from 'short-uuid' |
|||
import * as lightning from '../utils/lightning' |
|||
import {listUnspent,UTXO} from '../utils/wallet' |
|||
import * as jsonUtils from '../utils/json' |
|||
import { Op } from 'sequelize' |
|||
|
|||
type QueryType = 'onchain_address' |
|||
export interface Query { |
|||
type: QueryType |
|||
uuid: string |
|||
result?: string |
|||
app: string |
|||
} |
|||
|
|||
let queries: { [k: string]: Query } = {} |
|||
|
|||
const hub_pubkey = '023d70f2f76d283c6c4e58109ee3a2816eb9d8feb40b23d62469060a2b2867b77f' |
|||
|
|||
export async function listUTXOs(req, res) { |
|||
try { |
|||
const utxos:UTXO[] = await listUnspent() // at least 1 confg
|
|||
const addys = utxos.map(utxo=> utxo.address) |
|||
|
|||
const accountings = await models.Accounting.findAll({ |
|||
where:{ |
|||
onchain_address: { |
|||
[Op.in]: addys |
|||
}, |
|||
status: constants.statuses.pending |
|||
} |
|||
}) |
|||
|
|||
const ret: any[] = [] |
|||
accountings.forEach(a=>{ |
|||
const acc = {...a.dataValues} |
|||
const utxo = utxos.find(u=>u.address===a.onchainAddress) |
|||
if(utxo) { |
|||
acc.amount = utxo.amount_sat |
|||
acc.confirmations = utxo.confirmations |
|||
ret.push(acc) |
|||
} |
|||
}) |
|||
|
|||
success(res, ret.map(acc=> jsonUtils.accountingToJson(acc))) |
|||
} catch(e) { |
|||
failure(res, e) |
|||
} |
|||
} |
|||
|
|||
export async function queryOnchainAddress(req, res) { |
|||
console.log('=> queryOnchainAddress') |
|||
const uuid = short.generate() |
|||
const owner = await models.Contact.findOne({ where: { isOwner: true } }) |
|||
const app = req.params.app; |
|||
|
|||
const query:Query = { |
|||
type:'onchain_address', |
|||
uuid, |
|||
app |
|||
} |
|||
|
|||
const opts = { |
|||
amt: constants.min_sat_amount, |
|||
dest: hub_pubkey, |
|||
data: <network.Msg>{ |
|||
type: constants.message_types.query, |
|||
message: { |
|||
content: JSON.stringify(query) |
|||
}, |
|||
sender: { pub_key: owner.publicKey } |
|||
} |
|||
} |
|||
try { |
|||
await network.signAndSend(opts) |
|||
} catch (e) { |
|||
failure(res, e) |
|||
return |
|||
} |
|||
|
|||
let i = 0 |
|||
let interval = setInterval(() => { |
|||
if (i >= 15) { |
|||
clearInterval(interval) |
|||
delete queries[uuid] |
|||
failure(res, 'no response received') |
|||
return |
|||
} |
|||
if (queries[uuid]) { |
|||
success(res, queries[uuid].result) |
|||
clearInterval(interval) |
|||
delete queries[uuid] |
|||
return |
|||
} |
|||
i++ |
|||
}, 1000) |
|||
} |
|||
|
|||
export const receiveQuery = async (payload) => { |
|||
const dat = payload.content || payload |
|||
const sender_pub_key = dat.sender.pub_key |
|||
const content = dat.message.content |
|||
const owner = await models.Contact.findOne({ where: { isOwner: true } }) |
|||
|
|||
if(!sender_pub_key || !content || !owner) { |
|||
return console.log('=> wrong query format') |
|||
} |
|||
let q:Query |
|||
try { |
|||
q = JSON.parse(content) |
|||
} catch(e) { |
|||
console.log("=> ERROR receiveQuery,",e) |
|||
return |
|||
} |
|||
console.log('=> query received', q) |
|||
let result = '' |
|||
switch (q.type) { |
|||
case 'onchain_address': |
|||
const addy = await lightning.newAddress(lightning.NESTED_PUBKEY_HASH) |
|||
const acc = { |
|||
date: new Date(), |
|||
pubkey: sender_pub_key, |
|||
onchainAddress: addy, |
|||
amount: 0, |
|||
sourceApp: q.app, |
|||
status:constants.statuses.pending, |
|||
error:'', |
|||
} |
|||
await models.Accounting.create(acc) |
|||
result = addy |
|||
} |
|||
const ret:Query = { |
|||
type: q.type, |
|||
uuid: q.uuid, |
|||
app: q.app, |
|||
result, |
|||
} |
|||
const opts = { |
|||
amt: constants.min_sat_amount, |
|||
dest: sender_pub_key, |
|||
data: <network.Msg>{ |
|||
type: constants.message_types.query_response, |
|||
message: { |
|||
content: JSON.stringify(ret) |
|||
}, |
|||
sender: { pub_key: owner.publicKey } |
|||
} |
|||
} |
|||
try { |
|||
await network.signAndSend(opts) |
|||
} catch (e) { |
|||
console.log("FAILED TO SEND QUERY_RESPONSE") |
|||
return |
|||
} |
|||
} |
|||
|
|||
export const receiveQueryResponse = async (payload) => { |
|||
console.log('=> receiveQueryResponse') |
|||
const dat = payload.content || payload |
|||
// const sender_pub_key = dat.sender.pub_key
|
|||
const content = dat.message.content |
|||
try { |
|||
const q:Query = JSON.parse(content) |
|||
queries[q.uuid] = q |
|||
} catch(e) { |
|||
console.log("=> ERROR receiveQueryResponse,",e) |
|||
} |
|||
} |
@ -0,0 +1,38 @@ |
|||
import { Table, Column, Model, DataType } from 'sequelize-typescript'; |
|||
|
|||
@Table({ tableName: 'sphinx_accountings', underscored: true }) |
|||
export default class Accounting extends Model<Accounting> { |
|||
|
|||
@Column({ |
|||
type: DataType.BIGINT, |
|||
primaryKey: true, |
|||
unique: true, |
|||
autoIncrement: true |
|||
}) |
|||
id: number |
|||
|
|||
@Column |
|||
date: Date |
|||
|
|||
@Column |
|||
pubkey: string |
|||
|
|||
@Column |
|||
onchainAddress: string |
|||
|
|||
@Column(DataType.DECIMAL) |
|||
amount: number |
|||
|
|||
@Column |
|||
sourceApp: string |
|||
|
|||
@Column(DataType.BIGINT) |
|||
status: number |
|||
|
|||
@Column |
|||
error: string |
|||
|
|||
@Column(DataType.BIGINT) |
|||
chanId: number |
|||
|
|||
} |
@ -0,0 +1,52 @@ |
|||
|
|||
|
|||
import * as grpc from 'grpc' |
|||
import { loadCredentials } from './lightning' |
|||
import {loadConfig} from './config' |
|||
|
|||
const config = loadConfig() |
|||
const LND_IP = config.lnd_ip || 'localhost' |
|||
|
|||
let walletClient |
|||
|
|||
export const loadWalletKit = () => { |
|||
if (walletClient) { |
|||
return walletClient |
|||
} else { |
|||
try { |
|||
var credentials = loadCredentials() |
|||
var lnrpcDescriptor = grpc.load("proto/walletkit.proto"); |
|||
var walletkit: any = lnrpcDescriptor.walletrpc |
|||
walletClient = new walletkit.WalletKit(LND_IP + ':' + config.lnd_port, credentials); |
|||
return walletClient |
|||
} catch (e) { |
|||
throw e |
|||
} |
|||
} |
|||
} |
|||
|
|||
|
|||
export interface UTXO { |
|||
address: string |
|||
address_type: number |
|||
amount_sat: number |
|||
confirmations: number |
|||
} |
|||
|
|||
export async function listUnspent():Promise<UTXO[]> { |
|||
return new Promise(async (resolve, reject) => { |
|||
let walletkit = await loadWalletKit() |
|||
try { |
|||
const opts = {min_confs:0,max_confs:10000} |
|||
walletkit.listUnspent(opts, function(err, res){ |
|||
if (err || !(res&&res.utxos)) { |
|||
reject(err) |
|||
} else { |
|||
resolve(res.utxos) |
|||
} |
|||
}) |
|||
} catch(e) { |
|||
reject(e) |
|||
} |
|||
}) |
|||
} |
Loading…
Reference in new issue