on master help sign in
bitcoin: use zPub instead of xPub
42d3e0bpkova
package.json+1
@@ -53,6 +53,7 @@
53 "react-scripts": "3.0.1",
53 "react-scripts": "3.0.1",
54 "react-teleporter": "^1.1.0",
54 "react-teleporter": "^1.1.0",
55 "secp256k1": "^3.5.2",
55 "secp256k1": "^3.5.2",
56+ "bs58check": "^2.1.2",
56 "trezor-connect": "^8.1.14",
57 "trezor-connect": "^8.1.14",
57 "urbit-key-generation": "^0.18.0",
58 "urbit-key-generation": "^0.18.0",
58 "urbit-ob": "^4.1.4",
59 "urbit-ob": "^4.1.4",
src/views/Bitcoin.js+18−8
@@ -17,10 +17,18 @@ import BridgeForm from 'form/BridgeForm';
17
17
18import * as need from 'lib/need';
18import * as need from 'lib/need';
19import * as bitcoin from 'bitcoinjs-lib';
19import * as bitcoin from 'bitcoinjs-lib';
20+import * as bs58check from 'bs58check';
20import ob from 'urbit-ob';
21import ob from 'urbit-ob';
21import { Buffer } from 'buffer';
22import { Buffer } from 'buffer';
22import { composeValidator, buildPsbtValidator } from 'form/validators';
23import { composeValidator, buildPsbtValidator } from 'form/validators';
23
24
25+function xpubToYpub(xpub) {
26+ var data = bs58check.decode(xpub);
27+ data = data.slice(4);
28+ data = Buffer.concat([Buffer.from('04b24746', 'hex'), data]);
29+ return bs58check.encode(data);
30+}
31+
24export default function Bitcoin() {
32export default function Bitcoin() {
25 const { pop } = useLocalRouter();
33 const { pop } = useLocalRouter();
26 const { urbitWallet } = useWallet();
34 const { urbitWallet } = useWallet();
@@ -45,13 +53,15 @@ export default function Bitcoin() {
45 bitcoin.networks.bitcoin
53 bitcoin.networks.bitcoin
46 );
54 );
47
55
56+ const zPub = xpubToYpub(
48− const xPub = bitcoin.bip32
57+ bitcoin.bip32
49− .fromPublicKey(
58+ .fromPublicKey(
50− Buffer.from(pubKey, 'hex'),
59+ Buffer.from(pubKey, 'hex'),
51− Buffer.from(chain, 'hex'),
60+ Buffer.from(chain, 'hex'),
52− bitcoin.networks.bitcoin
61+ bitcoin.networks.bitcoin
53− )
62+ )
54− .toBase58();
63+ .toBase58()
64+ );
55
65
56 const validate = composeValidator({
66 const validate = composeValidator({
57 unsignedTransaction: buildPsbtValidator(hd),
67 unsignedTransaction: buildPsbtValidator(hd),
@@ -97,7 +107,7 @@ export default function Bitcoin() {
97 </Grid.Item>
107 </Grid.Item>
98 <Grid.Item full className="mt4" as={Text}>
108 <Grid.Item full className="mt4" as={Text}>
99 <Highlighted>
109 <Highlighted>
100− <CopiableAddressWrap>{xPub}</CopiableAddressWrap>
110+ <CopiableAddressWrap>{zPub}</CopiableAddressWrap>
101 </Highlighted>
111 </Highlighted>
102 </Grid.Item>
112 </Grid.Item>
103 <Grid.Item full className="mt4" as={Text}>
113 <Grid.Item full className="mt4" as={Text}>