finish ledger signature

This commit is contained in:
liangping
2021-09-10 20:13:31 +08:00
parent 3445a13cdf
commit fe36d08f35
12 changed files with 311 additions and 280 deletions
+19 -14
View File
@@ -102,13 +102,20 @@
label="Fee"
label-for="Fee"
>
<validation-provider
v-slot="{ errors }"
rules="required"
name="fee"
>
<b-input-group>
<b-input-group>
<validation-provider
v-slot="{ errors }"
rules="required|integer"
name="fee"
>
<b-form-input v-model="fee" />
<small class="text-danger">{{ errors[0] }}</small>
</validation-provider>
<validation-provider
v-slot="{ errors }"
rules="required"
name="feeDenom"
>
<b-form-select
v-model="feeDenom"
>
@@ -120,9 +127,9 @@
{{ item.denom }}
</b-form-select-option>
</b-form-select>
</b-input-group>
<small class="text-danger">{{ errors[0] }}</small>
</validation-provider>
<small class="text-danger">{{ errors[0] }}</small>
</validation-provider>
</b-input-group>
</b-form-group>
</b-col>
</b-row>
@@ -171,12 +178,11 @@
>
Keplr
</b-form-radio>
<!-- <b-form-radio
<b-form-radio
v-model="wallet"
name="wallet"
value="ledgerUSB"
class="mb-1 mt-1"
disabled
>
Ledger (USB)
</b-form-radio>
@@ -185,10 +191,9 @@
name="wallet"
value="ledgerBle"
class="mb-1 mt-1"
disabled
>
Ledger (Bluetooth)
</b-form-radio> -->
</b-form-radio>
</b-form-radio-group>
<small class="text-danger">{{ errors[0] }}</small>
</validation-provider>
@@ -262,7 +267,7 @@ export default {
balance: [],
delegations: [],
memo: '',
fee: 800,
fee: '800',
feeDenom: '',
wallet: 'keplr',
error: null,
+19 -14
View File
@@ -117,13 +117,20 @@
label="Fee"
label-for="Fee"
>
<validation-provider
v-slot="{ errors }"
rules="required"
name="fee"
>
<b-input-group>
<b-input-group>
<validation-provider
v-slot="{ errors }"
rules="required|integer"
name="fee"
>
<b-form-input v-model="fee" />
<small class="text-danger">{{ errors[0] }}</small>
</validation-provider>
<validation-provider
v-slot="{ errors }"
rules="required"
name="feeDenom"
>
<b-form-select
v-model="feeDenom"
>
@@ -135,9 +142,9 @@
{{ item.denom }}
</b-form-select-option>
</b-form-select>
</b-input-group>
<small class="text-danger">{{ errors[0] }}</small>
</validation-provider>
<small class="text-danger">{{ errors[0] }}</small>
</validation-provider>
</b-input-group>
</b-form-group>
</b-col>
</b-row>
@@ -186,12 +193,11 @@
>
Keplr
</b-form-radio>
<!-- <b-form-radio
<b-form-radio
v-model="wallet"
name="wallet"
value="ledgerUSB"
class="mb-1 mt-1"
disabled
>
Ledger (USB)
</b-form-radio>
@@ -200,10 +206,9 @@
name="wallet"
value="ledgerBle"
class="mb-1 mt-1"
disabled
>
Ledger (Bluetooth)
</b-form-radio> -->
</b-form-radio>
</b-form-radio-group>
<small class="text-danger">{{ errors[0] }}</small>
</validation-provider>
@@ -278,7 +283,7 @@ export default {
balance: [],
delegations: [],
memo: '',
fee: 800,
fee: '800',
feeDenom: '',
wallet: 'keplr',
error: null,
+19 -14
View File
@@ -129,13 +129,20 @@
label="Fee"
label-for="Fee"
>
<validation-provider
v-slot="{ errors }"
rules="required"
name="fee"
>
<b-input-group>
<b-input-group>
<validation-provider
v-slot="{ errors }"
rules="required|integer"
name="fee"
>
<b-form-input v-model="fee" />
<small class="text-danger">{{ errors[0] }}</small>
</validation-provider>
<validation-provider
v-slot="{ errors }"
rules="required"
name="feeDenom"
>
<b-form-select
v-model="feeDenom"
>
@@ -147,9 +154,9 @@
{{ item.denom }}
</b-form-select-option>
</b-form-select>
</b-input-group>
<small class="text-danger">{{ errors[0] }}</small>
</validation-provider>
<small class="text-danger">{{ errors[0] }}</small>
</validation-provider>
</b-input-group>
</b-form-group>
</b-col>
</b-row>
@@ -198,12 +205,11 @@
>
Keplr
</b-form-radio>
<!-- <b-form-radio
<b-form-radio
v-model="wallet"
name="wallet"
value="ledgerUSB"
class="mb-1 mt-1"
disabled
>
Ledger (USB)
</b-form-radio>
@@ -212,10 +218,9 @@
name="wallet"
value="ledgerBle"
class="mb-1 mt-1"
disabled
>
Ledger (Bluetooth)
</b-form-radio> -->
</b-form-radio>
</b-form-radio-group>
<small class="text-danger">{{ errors[0] }}</small>
</validation-provider>
@@ -283,7 +288,7 @@ export default {
amount: null,
memo: '',
recipient: null,
fee: 800,
fee: '800',
feeDenom: '',
wallet: 'keplr',
error: null,
+19 -14
View File
@@ -102,13 +102,20 @@
label="Fee"
label-for="Fee"
>
<validation-provider
v-slot="{ errors }"
rules="required"
name="fee"
>
<b-input-group>
<b-input-group>
<validation-provider
v-slot="{ errors }"
rules="required|integer"
name="fee"
>
<b-form-input v-model="fee" />
<small class="text-danger">{{ errors[0] }}</small>
</validation-provider>
<validation-provider
v-slot="{ errors }"
rules="required"
name="feeDenom"
>
<b-form-select
v-model="feeDenom"
>
@@ -120,9 +127,9 @@
{{ item.denom }}
</b-form-select-option>
</b-form-select>
</b-input-group>
<small class="text-danger">{{ errors[0] }}</small>
</validation-provider>
<small class="text-danger">{{ errors[0] }}</small>
</validation-provider>
</b-input-group>
</b-form-group>
</b-col>
</b-row>
@@ -171,12 +178,11 @@
>
Keplr
</b-form-radio>
<!-- <b-form-radio
<b-form-radio
v-model="wallet"
name="wallet"
value="ledgerUSB"
class="mb-1 mt-1"
disabled
>
Ledger (USB)
</b-form-radio>
@@ -185,10 +191,9 @@
name="wallet"
value="ledgerBle"
class="mb-1 mt-1"
disabled
>
Ledger (Bluetooth)
</b-form-radio> -->
</b-form-radio>
</b-form-radio-group>
<small class="text-danger">{{ errors[0] }}</small>
</validation-provider>
@@ -262,7 +267,7 @@ export default {
balance: [],
delegations: [],
memo: '',
fee: 800,
fee: '800',
feeDenom: '',
wallet: 'keplr',
error: null,
+19 -14
View File
@@ -92,13 +92,20 @@
label="Fee"
label-for="Fee"
>
<validation-provider
v-slot="{ errors }"
rules="required"
name="fee"
>
<b-input-group>
<b-input-group>
<validation-provider
v-slot="{ errors }"
rules="required|integer"
name="fee"
>
<b-form-input v-model="fee" />
<small class="text-danger">{{ errors[0] }}</small>
</validation-provider>
<validation-provider
v-slot="{ errors }"
rules="required"
name="feeDenom"
>
<b-form-select
v-model="feeDenom"
>
@@ -110,9 +117,9 @@
{{ item.denom }}
</b-form-select-option>
</b-form-select>
</b-input-group>
<small class="text-danger">{{ errors[0] }}</small>
</validation-provider>
<small class="text-danger">{{ errors[0] }}</small>
</validation-provider>
</b-input-group>
</b-form-group>
</b-col>
</b-row>
@@ -161,12 +168,11 @@
>
Keplr
</b-form-radio>
<!-- <b-form-radio
<b-form-radio
v-model="wallet"
name="wallet"
value="ledgerUSB"
class="mb-1 mt-1"
disabled
>
Ledger (USB)
</b-form-radio>
@@ -175,10 +181,9 @@
name="wallet"
value="ledgerBle"
class="mb-1 mt-1"
disabled
>
Ledger (Bluetooth)
</b-form-radio> -->
</b-form-radio>
</b-form-radio-group>
<small class="text-danger">{{ errors[0] }}</small>
</validation-provider>
@@ -248,7 +253,7 @@ export default {
selectedChain: '',
balance: [],
memo: '',
fee: null,
fee: '',
feeDenom: '',
wallet: 'keplr',
error: null,
@@ -44,13 +44,20 @@
label="Fee"
label-for="Fee"
>
<validation-provider
v-slot="{ errors }"
rules="required"
name="fee"
>
<b-input-group>
<b-input-group>
<validation-provider
v-slot="{ errors }"
rules="required|integer"
name="fee"
>
<b-form-input v-model="fee" />
<small class="text-danger">{{ errors[0] }}</small>
</validation-provider>
<validation-provider
v-slot="{ errors }"
rules="required"
name="feeDenom"
>
<b-form-select
v-model="feeDenom"
>
@@ -62,9 +69,9 @@
{{ item.denom }}
</b-form-select-option>
</b-form-select>
</b-input-group>
<small class="text-danger">{{ errors[0] }}</small>
</validation-provider>
<small class="text-danger">{{ errors[0] }}</small>
</validation-provider>
</b-input-group>
</b-form-group>
</b-col>
</b-row>
@@ -113,12 +120,11 @@
>
Keplr
</b-form-radio>
<!-- <b-form-radio
<b-form-radio
v-model="wallet"
name="wallet"
value="ledgerUSB"
class="mb-1 mt-1"
disabled
>
Ledger (USB)
</b-form-radio>
@@ -127,10 +133,9 @@
name="wallet"
value="ledgerBle"
class="mb-1 mt-1"
disabled
>
Ledger (Bluetooth)
</b-form-radio> -->
</b-form-radio>
</b-form-radio-group>
<small class="text-danger">{{ errors[0] }}</small>
</validation-provider>
@@ -199,7 +204,7 @@ export default {
balance: [],
delegations: [],
memo: '',
fee: 800,
fee: '800',
feeDenom: '',
wallet: 'keplr',
error: null,
+20 -15
View File
@@ -44,13 +44,20 @@
label="Fee"
label-for="Fee"
>
<validation-provider
v-slot="{ errors }"
rules="required"
name="fee"
>
<b-input-group>
<b-input-group>
<validation-provider
v-slot="{ errors }"
rules="required|integer"
name="fee"
>
<b-form-input v-model="fee" />
<small class="text-danger">{{ errors[0] }}</small>
</validation-provider>
<validation-provider
v-slot="{ errors }"
rules="required"
name="feeDenom"
>
<b-form-select
v-model="feeDenom"
>
@@ -62,9 +69,9 @@
{{ item.denom }}
</b-form-select-option>
</b-form-select>
</b-input-group>
<small class="text-danger">{{ errors[0] }}</small>
</validation-provider>
<small class="text-danger">{{ errors[0] }}</small>
</validation-provider>
</b-input-group>
</b-form-group>
</b-col>
</b-row>
@@ -113,12 +120,11 @@
>
Keplr
</b-form-radio>
<!-- <b-form-radio
<b-form-radio
v-model="wallet"
name="wallet"
value="ledgerUSB"
class="mb-1 mt-1"
disabled
>
Ledger (USB)
</b-form-radio>
@@ -127,10 +133,9 @@
name="wallet"
value="ledgerBle"
class="mb-1 mt-1"
disabled
>
Ledger (Bluetooth)
</b-form-radio> -->
</b-form-radio>
</b-form-radio-group>
<small class="text-danger">{{ errors[0] }}</small>
</validation-provider>
@@ -154,7 +159,7 @@ import {
required, email, url, between, alpha, integer, password, min, digits, alphaDash, length,
} from '@validations'
import {
formatToken, getLocalAccounts, getLocalChains, setLocalTxHistory, sign, timeIn,
formatToken, getLocalAccounts, getLocalChains, sign, timeIn, setLocalTxHistory,
} from '@/libs/data'
import chainAPI from '@/libs/fetch'
import ToastificationContent from '@core/components/toastification/ToastificationContent.vue'
@@ -195,7 +200,7 @@ export default {
balance: [],
delegations: [],
memo: '',
fee: 800,
fee: '800',
feeDenom: '',
wallet: 'keplr',
error: null,
+3 -1
View File
@@ -100,7 +100,9 @@
</b-card-body>
</b-card>
<b-card>
<b-card
v-if="delegations"
>
<b-card-header class="pt-0 pl-0 pr-0">
<b-card-title>Delegation</b-card-title>
<div>
+73 -14
View File
@@ -79,6 +79,29 @@
</validation-provider>
</b-form-group>
</b-col>
<b-col
v-if="device.startsWith('ledger')"
md="12"
>
<b-form-group
label="HD Path"
label-for="hdpath"
>
<validation-provider
#default="{ errors }"
name="HD Path"
rules="required"
>
<b-form-input
v-model="hdpath"
class="mt-1"
name="hdpath"
placeholder="m/44'/118/0'/0/0"
/>
<small class="text-danger">{{ errors[0] }}</small>
</validation-provider>
</b-form-group>
</b-col>
</b-row>
</validation-observer>
</tab-content>
@@ -113,6 +136,29 @@
</validation-provider>
</b-form-group>
</b-col>
<b-col
v-if="accounts"
md="12"
>
<b-form-group
label="Public Key"
label-for="ir"
>
<validation-provider
#default="{ errors }"
name="Public Key"
rules="required"
>
<b-form-input
id="ir"
:value="formatPubkey(accounts.pubkey)"
readonly
:state="errors.length > 0 ? false:null"
/>
<small class="text-danger">{{ errors[0] }}</small>
</validation-provider>
</b-form-group>
</b-col>
<b-col md="12">
<b-form-group
label="Import Address For Chains:"
@@ -216,6 +262,7 @@ import {
import { required } from '@validations'
import store from '@/store'
import { addressDecode, addressEnCode, getLedgerAddress } from '@/libs/data'
import { toHex } from '@cosmjs/encoding'
export default {
components: {
@@ -241,6 +288,7 @@ export default {
debug: '',
device: 'keplr',
address: '',
hdpath: "m/44'/118/0'/0/0",
name: '',
options: {},
required,
@@ -255,13 +303,17 @@ export default {
},
addresses() {
if (!this.accounts) return []
const { data } = addressDecode(this.accounts.address)
return this.selected.map(x => {
const { logo, addr_prefix } = this.chains[x]
const addr = addressEnCode(addr_prefix, data)
return { chain: x, addr, logo }
})
if (this.accounts && this.accounts.address) {
const { data } = addressDecode(this.accounts.address)
return this.selected.map(x => {
const { logo, addr_prefix } = this.chains[x]
const addr = addressEnCode(addr_prefix, data)
return {
chain: x, addr, logo, hdpath: this.hdpath,
}
})
}
return []
},
},
created() {
@@ -271,11 +323,18 @@ export default {
}
},
methods: {
formatPubkey(v) {
if (typeof (v) === 'string') {
return v
}
if (v) {
return toHex(v)
}
return ''
},
async connect() {
const transport = this.device === 'ledger' ? 'usb' : 'bluetooth'
return getLedgerAddress(transport).catch(e => {
this.debug = e
})
return getLedgerAddress(transport, this.hdpath)
},
async cennectKeplr() {
if (!window.getOfflineSigner || !window.keplr) {
@@ -338,12 +397,12 @@ export default {
case 'ledger2':
await this.connect().then(accounts => {
if (accounts) {
this.accounts = {
address: accounts.bech32_address,
pubkey: accounts.compressed_pk,
}
// eslint-disable-next-line prefer-destructuring
this.accounts = accounts[0]
ok = true
}
}).catch(e => {
this.debug = e
})
break
default:
+7 -2
View File
@@ -254,9 +254,14 @@ export default {
return 0
},
removeAddress(v) {
Object.values(this.accounts).forEach(item => {
Object.keys(this.accounts).forEach(key => {
const item = this.accounts[key]
const newAddrs = item.address.filter(a => a.addr !== v)
this.$set(item, 'address', newAddrs)
if (newAddrs.length > 0) {
this.$set(item, 'address', newAddrs)
} else {
delete this.accounts[key]
}
})
localStorage.setItem('accounts', JSON.stringify(this.accounts))
},