This is an OpenPGP proof that connects my OpenPGP key to this Github account. For details check out https://keyoxide.org/guides/openpgp-proofs
[Verifying my OpenPGP key: openpgp4fpr:7916CD5B034FB6573E5FF306FB0E9BFF77E167D3]
This is an OpenPGP proof that connects my OpenPGP key to this Github account. For details check out https://keyoxide.org/guides/openpgp-proofs
[Verifying my OpenPGP key: openpgp4fpr:7916CD5B034FB6573E5FF306FB0E9BFF77E167D3]
The following example is a simple way to mix coins without the need for a complex coinjoin coordination. Of course it has its limits but is extremely easy to impliment.
The basic idea is to emulate lightning channel opening and closing. A channel open is creating a 2-of-2 multisig address. So you could use existing simple techniques for key derivation to create such an address.
This is a simple illustration on the concept, it may not be obvious since none of the built in commands do this,
but may be useful for example to create a version of listsendpays
where you can pass multiple payment hashes,
or something more sofisticated
command
lightning-cli say-hi-yall '["Fred","Barney","Wilma","Betty","Pebbles","Bam Bam"]'
I hereby claim:
To claim this, I am signing this object:
const fs = require('fs') | |
const args = process.argv.reduce((o, a) => { | |
if(~a.indexOf('=')) { | |
const kv = a.split('=') | |
o[kv[0]] = kv[1] | |
} | |
return o | |
}, {}) |
var opcodes = { | |
OP_0: 0x00, | |
OP_PUSHDATA1: 0x4c, | |
OP_PUSHDATA2: 0x4d, | |
OP_PUSHDATA4: 0x4e, | |
// continue with the rest of opcodes, grab from https://github.com/bcoin-org/bcoin/blob/master/lib/script/common.js | |
}; | |
var codeops = Object.keys(opcodes).reduce(function(o, k) { | |
o[opcodes[k]] = k; return o; | |
},{}) |
var watcher = { | |
extend: function(context, k, _state) { | |
var tmp = context[k] | |
if(typeof tmp == 'object') watcher.watch(tmp, _state._callback) | |
if(Array.isArray(tmp)) { | |
['push', 'sort', 'splice', 'unshift', 'reverse', 'shift', 'pop'].forEach(function(key) { | |
tmp[key] = function() { | |
var lold = tmp.length | |
Array.prototype[key].apply(tmp, arguments) | |
for(var i = lold; i < tmp.length; i++) watcher.extend(tmp, i, _state) |
;(function(riot) { | |
riot.promise = function() { | |
riot.observable(this) | |
var self = this | |
this.get = function(url) { | |
var request = new XMLHttpRequest(); | |
request.promise = riot.observable() | |
request.open('GET', url, true) | |
;(function(ko) { | |
ko.promise = function() { | |
var self = this | |
var promise = ko.observableArray([]) | |
promise.get = function(url) { | |
var request = new XMLHttpRequest(); | |
request.promise = ko.observable({}) | |
request.open('GET', url, true) |
;(function(ko, evt) { | |
var fns = ko.observableArray(), | |
current | |
function emit(path) { | |
if (path.type) path = location.hash.slice(1) | |
if (path != current) { | |
fns(path.split('/')) |