on master help sign in
Refactor urbitWallet->wallet logic into /lib/wallet.js
a08dec9Fang
src/bridge/Bridge.js+12−2
@@ -12,7 +12,7 @@ import { Container, Row, Col } from './components/Base'
12
12
13import { ROUTE_NAMES, router } from './lib/router'
13import { ROUTE_NAMES, router } from './lib/router'
14import { NETWORK_NAMES } from './lib/network'
14import { NETWORK_NAMES } from './lib/network'
15−import { WALLET_NAMES, DEFAULT_HD_PATH } from './lib/wallet'
15+import { WALLET_NAMES, DEFAULT_HD_PATH, walletFromMnemonic } from './lib/wallet'
16import { BRIDGE_ERROR } from './lib/error'
16import { BRIDGE_ERROR } from './lib/error'
17
17
18const initWeb3 = (networkType) => {
18const initWeb3 = (networkType) => {
@@ -212,8 +212,18 @@ class Bridge extends React.Component {
212 this.setState({ walletHdPath })
212 this.setState({ walletHdPath })
213 }
213 }
214
214
215+ // also sets wallet to ownership address
215 setUrbitWallet(urbitWallet) {
216 setUrbitWallet(urbitWallet) {
217+ let wallet = this.state.wallet;
218+ if (Just.hasInstance(urbitWallet)) {
219+ const mnemonic = urbitWallet.value.ownership.seed;
220+ wallet = walletFromMnemonic(
221+ mnemonic,
222+ DEFAULT_HD_PATH,
223+ urbitWallet.value.meta.passphrase
224+ );
225+ }
216− this.setState({ urbitWallet })
226+ this.setState({ urbitWallet, wallet })
217 }
227 }
218
228
219 setAuthMnemonic(authMnemonic) {
229 setAuthMnemonic(authMnemonic) {
src/bridge/lib/wallet.js+18
@@ -4,6 +4,8 @@ import keccak from 'keccak'
4import * as lodash from 'lodash'
4import * as lodash from 'lodash'
5import Maybe from 'folktale/maybe'
5import Maybe from 'folktale/maybe'
6import * as secp256k1 from 'secp256k1'
6import * as secp256k1 from 'secp256k1'
7+import * as ob from 'urbit-ob'
8+import * as kg from '../../../node_modules/urbit-key-generation/dist/index'
7
9
8const DEFAULT_HD_PATH = "m/44'/60'/0'/0/0"
10const DEFAULT_HD_PATH = "m/44'/60'/0'/0/0"
9
11
@@ -86,6 +88,21 @@ const toChecksumAddress = (address) => {
86const eqAddr = (addr0, addr1) =>
88const eqAddr = (addr0, addr1) =>
87 toChecksumAddress(addr0) === toChecksumAddress(addr1)
89 toChecksumAddress(addr0) === toChecksumAddress(addr1)
88
90
91+const urbitWalletFromTicket = async (ticket, point, passphrase) => {
92+ if (typeof point === 'string') {
93+ point = ob.patp2dec(point);
94+ }
95+ let uhdw = await kg.generateWallet({
96+ ticket: ticket,
97+ ship: point,
98+ passphrase: passphrase
99+ });
100+ //TODO remove after keygen-js#61 gets released
101+ uhdw.meta.ship = point;
102+ uhdw.meta.passphrase = passphrase;
103+ return uhdw;
104+}
105+
89const walletFromMnemonic = (mnemonic, hdpath, passphrase) => {
106const walletFromMnemonic = (mnemonic, hdpath, passphrase) => {
90 const seed =
107 const seed =
91 bip39.validateMnemonic(mnemonic)
108 bip39.validateMnemonic(mnemonic)
@@ -117,6 +134,7 @@ export {
117 toChecksumAddress,
134 toChecksumAddress,
118 addressFromSecp256k1Public,
135 addressFromSecp256k1Public,
119 eqAddr,
136 eqAddr,
137+ urbitWalletFromTicket,
120 walletFromMnemonic,
138 walletFromMnemonic,
121 addHexPrefix,
139 addHexPrefix,
122 EthereumWallet
140 EthereumWallet
src/bridge/views/InviteLogin.js+3−11
@@ -7,7 +7,7 @@ import * as kg from '../../../node_modules/urbit-key-generation/dist/index'
7import * as ob from 'urbit-ob'
7import * as ob from 'urbit-ob'
8
8
9import { ROUTE_NAMES } from '../lib/router'
9import { ROUTE_NAMES } from '../lib/router'
10−import { DEFAULT_HD_PATH, walletFromMnemonic } from '../lib/wallet'
10+import { DEFAULT_HD_PATH, urbitWalletFromTicket } from '../lib/wallet'
11
11
12const placeholder = (len) => {
12const placeholder = (len) => {
13 let bytes = window.crypto.getRandomValues(new Uint8Array(len))
13 let bytes = window.crypto.getRandomValues(new Uint8Array(len))
@@ -40,20 +40,12 @@ class InviteLogin extends React.Component {
40 }
40 }
41
41
42 async walletFromTicket(ticket, pointName) {
42 async walletFromTicket(ticket, pointName) {
43− const { setWallet, setUrbitWallet } = this.props
44−
45 this.setState({
43 this.setState({
46 isUnlocking: true
44 isUnlocking: true
47 });
45 });
48
46
49− const urbitWallet = await kg.generateWallet({
47+ const uhdw = await urbitWalletFromTicket(ticket, '~zod');
50− ticket: ticket,
51− ship: ob.patp2dec('~zod') //NOTE invite wallet
52− })
53− const mnemonic = urbitWallet.ownership.seed
54− const wallet = walletFromMnemonic(mnemonic, DEFAULT_HD_PATH)
55− setWallet(wallet)
56− setUrbitWallet(Just(urbitWallet))
48+ this.props.setUrbitWallet(Just(uhdw));
57
49
58 this.setState({
50 this.setState({
59 isUnlocking: false
51 isUnlocking: false
src/bridge/views/Shards.js+3−12
@@ -14,7 +14,7 @@ import * as kg from '../../../node_modules/urbit-key-generation/dist/index'
14import * as ob from 'urbit-ob'
14import * as ob from 'urbit-ob'
15
15
16import { ROUTE_NAMES } from '../lib/router'
16import { ROUTE_NAMES } from '../lib/router'
17−import { DEFAULT_HD_PATH, walletFromMnemonic } from '../lib/wallet'
17+import { DEFAULT_HD_PATH, urbitWalletFromTicket } from '../lib/wallet'
18
18
19const placeholder = (len) => {
19const placeholder = (len) => {
20 let bytes = window.crypto.getRandomValues(new Uint8Array(len))
20 let bytes = window.crypto.getRandomValues(new Uint8Array(len))
@@ -73,8 +73,6 @@ class Shards extends React.Component {
73 }
73 }
74
74
75 async walletFromShards(shard1, shard2, shard3, pointName, passphrase) {
75 async walletFromShards(shard1, shard2, shard3, pointName, passphrase) {
76− const { setWallet, setUrbitWallet } = this.props
77−
78 const s1 = shard1 === '' ? undefined : shard1
76 const s1 = shard1 === '' ? undefined : shard1
79 const s2 = shard2 === '' ? undefined : shard2
77 const s2 = shard2 === '' ? undefined : shard2
80 const s3 = shard3 === '' ? undefined : shard3
78 const s3 = shard3 === '' ? undefined : shard3
@@ -87,15 +85,8 @@ class Shards extends React.Component {
87 }
85 }
88
86
89 if (ticket !== undefined) {
87 if (ticket !== undefined) {
90− const urbitWallet = await kg.generateWallet({
88+ const uhdw = await urbitWalletFromTicket(ticket, pointName, passphrase);
91− ticket: ticket,
92− ship: ob.patp2dec(pointName),
93− passphrase: passphrase
94− })
95− const mnemonic = urbitWallet.ownership.seed
96− const wallet = walletFromMnemonic(mnemonic, DEFAULT_HD_PATH, passphrase)
97− setWallet(wallet)
98− setUrbitWallet(Just(urbitWallet))
89+ this.props.setUrbitWallet(Just(uhdw));
99 }
90 }
100 }
91 }
101
92
src/bridge/views/Ticket.js+3−12
@@ -14,7 +14,7 @@ import * as kg from '../../../node_modules/urbit-key-generation/dist/index'
14import * as ob from 'urbit-ob'
14import * as ob from 'urbit-ob'
15
15
16import { ROUTE_NAMES } from '../lib/router'
16import { ROUTE_NAMES } from '../lib/router'
17−import { DEFAULT_HD_PATH, walletFromMnemonic } from '../lib/wallet'
17+import { DEFAULT_HD_PATH, urbitWalletFromTicket } from '../lib/wallet'
18
18
19const placeholder = (len) => {
19const placeholder = (len) => {
20 let bytes = window.crypto.getRandomValues(new Uint8Array(len))
20 let bytes = window.crypto.getRandomValues(new Uint8Array(len))
@@ -60,21 +60,12 @@ class Ticket extends React.Component {
60 }
60 }
61
61
62 async walletFromTicket(ticket, pointName, passphrase) {
62 async walletFromTicket(ticket, pointName, passphrase) {
63− const { setWallet, setUrbitWallet } = this.props
64−
65 this.setState({
63 this.setState({
66 isUnlocking: true
64 isUnlocking: true
67 });
65 });
68
66
69− const urbitWallet = await kg.generateWallet({
67+ const uhdw = await urbitWalletFromTicket(ticket, pointName, passphrase);
70− ticket: ticket,
71− ship: ob.patp2dec(pointName),
72− passphrase: passphrase
73− })
74− const mnemonic = urbitWallet.ownership.seed
75− const wallet = walletFromMnemonic(mnemonic, DEFAULT_HD_PATH, passphrase)
76− setWallet(wallet)
77− setUrbitWallet(Just(urbitWallet))
68+ this.props.setUrbitWallet(Just(uhdw));
78
69
79 this.setState({
70 this.setState({
80 isUnlocking: false
71 isUnlocking: false