Transaction

61ada520bfa9f62138fc2e7b6aa6b3f8866c4f9a2594de29b64882e0e82cc1c5
Timestamp (utc)
2019-09-03 02:09:57
Fee Paid
0.00004018 BSV
(
0.00004018 BSV
-
0.00000000 BSV
)
Fee Rate
1,004 sat/KB
Version
1
Confirmations
336,373
Size Stats
4,001 B

1 Output

Total Output:
0.00000000 BSV
  • jmeta"1DZ7mZMBoSHyhMu6pvafHCFUjnYpM3baFW@ab038b1af13995cae0ef42f5facc7cc4ffc0a647e503bf19bdf451ce3a1076a0|"19HxigV4QyBv3tHpQVcUEQyq1pzZVdoAutMº import bsv from 'bsv'; import { MetanetNode } from '../metanet/metanet-node'; import { Metanet } from '../metanet/metanet'; export interface MasterKeyEntry { masterKey: string; // xpriv publicAddress: string; txId: string; repoName: string; } export class MasterKeyStorage { static getMasterKeys(): MasterKeyEntry[] | undefined { if (window.localStorage) { let masterKeysJson = window.localStorage.masterKeys; if (masterKeysJson) { const masterKeys = JSON.parse(masterKeysJson); return masterKeys; } } } static storeMasterKey(xprv: string, txId: string, repoName: string) { // Retrieve if (window.localStorage) { let masterKeysJson = window.localStorage.masterKeys; if (!masterKeysJson) { masterKeysJson = '[]'; } const masterKeys = JSON.parse(masterKeysJson); let storedMasterKey = masterKeys.find((m: any) => m.masterKey === xprv); if (!storedMasterKey) { storedMasterKey = {} as any; masterKeys.push(storedMasterKey); } storedMasterKey.masterKey = xprv; storedMasterKey.publicAddress = bsv.HDPrivateKey(xprv).deriveChild('m/0').publicKey.toAddress().toString(); storedMasterKey.txId = txId; storedMasterKey.repoName = repoName; window.localStorage.masterKeys = JSON.stringify(masterKeys, null, 2); } else { console.log('No local storage to store master key!'); } } static getMasterKeyEntry(publicAddress: string): MasterKeyEntry | undefined { if (window.localStorage) { let masterKeysJson = window.localStorage.masterKeys; if (masterKeysJson) { const masterKeys = JSON.parse(masterKeysJson); return masterKeys.find((entry: MasterKeyEntry) => entry.publicAddress === publicAddress); } } } /** * Gets the root of the child and then the master key entry. * @param child */ static async getMasterKeyEntryForChild(child: MetanetNode): Promise<MasterKeyEntry | undefined> { const root = await Metanet.getRoot(child); if (root && window.localStorage) { let masterKeysJson = window.localStorage.masterKeys; if (masterKeysJson) { const masterKeys = JSON.parse(masterKeysJson); return masterKeys.find((entry: MasterKeyEntry) => entry.publicAddress === root.nodeAddress); } } } static getMasterKey(publicAddress: string): any { const masterKeyEntry = this.getMasterKeyEntry(publicAddress); if (masterKeyEntry) { return bsv.HDPrivateKey(masterKeyEntry.masterKey); } } static importFromJSON(importText: string): MasterKeyEntry[] | undefined { if (window.localStorage) { const masterKeys = this.getMasterKeys() || [] as MasterKeyEntry[]; const newMasterKeys = JSON.parse(importText) as MasterKeyEntry[]; for (const newEntry of newMasterKeys) { const previousEntry = masterKeys.find((entry, i) => entry.publicAddress === newEntry.publicAddress); if (!previousEntry) { masterKeys.push(newEntry); } else { Object.assign(previousEntry, newEntry); } } window.localStorage.masterKeys = JSON.stringify(masterKeys, null, 2); return masterKeys; } } }  master-key-storage.ts|"1D1PdbxVxcjfovTATC3ginxjj4enTgxLyYSHA-512@ÿ6žoë—vç¬óy¨09IG.:Üz*ÎÎBc”[ŠJkÿK$Di¬'T9Úeâìqyóƒ@ã/NGb20ü|"179UZJnghXeAMzH4kBRqLpqeoHRaefwyd2 m/0/5/9/2|"14aRXSJYPorVuDNET3CzCWZmKh8K7dfqT7Jolonhttps://twitter.com/jolonCuratorFreejolon@moneybutton.com0.10AUD|"14aRXSJYPorVuDNET3CzCWZmKh8K7dfqT7 Codeonchainhttps://twitter.com/jolonWebFree"codeonchainnetwork@moneybutton.com0.20AUD
    https://whatsonchain.com/tx/61ada520bfa9f62138fc2e7b6aa6b3f8866c4f9a2594de29b64882e0e82cc1c5