修改购买盒子的签名方法

This commit is contained in:
cebgcontract 2022-02-18 15:41:29 +08:00
parent 204403a0f5
commit b33473f1c5
4 changed files with 83 additions and 15 deletions

View File

@ -1,9 +1,9 @@
VUE_APP_WALLET_INFURAID='e7743d46923911fa8850619b7a7f6d9d'
VUE_APP_BASE_API='https://market-test.kingsome.cn'
VUE_APP_CHAIN_ID=322
VUE_APP_CHAIN_RPC='https://rpc-testnet.kcc.network'
VUE_APP_CHAIN_NAME='KCC-TESTNET'
VUE_APP_CHAIN_EXPLORERURL='https://scan-testnet.kcc.network
VUE_APP_CHAIN_ID=1338
VUE_APP_CHAIN_RPC='http://192.168.100.22:8545'
VUE_APP_CHAIN_NAME='22'
VUE_APP_CHAIN_EXPLORERURL=''
VUE_APP_CHAIN_CURRENCY_NAME='name'
VUE_APP_CHAIN_CURRENCY_SYMBOL='KCS'
VUE_APP_CHAIN_CURRENCY_SYMBOL='BEC'
VUE_APP_CHAIN_CURRENCY_DECIMALS=18

View File

@ -6,7 +6,8 @@
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint",
"deploy": "ztools png ./dist && rm -f ./dist/.DS_Store && aws s3 sync ./dist s3://cebg.games"
"deploy": "rm -f ./dist/.DS_Store && aws s3 sync ./dist s3://cebg.games",
"deploy:test": "rm -f ./dist/.DS_Store && aws s3 sync ./dist s3://test.cebg.games"
},
"dependencies": {
"@walletconnect/web3-provider": "^1.7.1",

View File

@ -7,15 +7,14 @@
<!-- <meta name="viewport" content="width=device-width,initial-scale=1.0">-->
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title><%= htmlWebpackPlugin.options.title %></title>
<script src="assets/libs/spine-webgl.js"></script>
<style>
@font-face {
font-family: title;
src: url('assets/fonts/title.ttf');
src: url('/assets/fonts/title.ttf');
}
@font-face {
font-family: zitic;
src: url('assets/fonts/zitic.ttf');
src: url('/assets/fonts/zitic.ttf');
}
html *
{

View File

@ -7,6 +7,13 @@ import { MessageBox } from 'element-ui'
import { ERC20ABI, MALL_ADDRESS } from '@/utils/config_chain'
import { EventBus, NEED_LOGIN } from '@/utils/event-bus'
const EIP721_DOMAIN_DATA = [
{ name: 'name', type: 'string' },
{ name: 'version', type: 'string' },
{ name: 'chainId', type: 'uint256' },
{ name: 'verifyingContract', type: 'address' }
]
@singleton
export class BlockChain {
provider:any
@ -196,12 +203,29 @@ export class BlockChain {
buyerAddress: string
}) {
const nonce = Math.random() * 100000 | 0
const signStr: string = this.web3.utils.soliditySha3(type, paymentTokenAddress, price, nonce)!
const signStr2 = this.web3.eth.accounts.hashMessage(signStr)
let signature = await this.web3.eth.sign(signStr2, buyerAddress)
// console.log(paymentTokenAddress, type, nonce, price, signature)
// const whoSigned1 = await this.web3.eth.accounts.recover(signStr2, signature, true)
signature = signature.replace(/00$/, '1b').replace(/01$/, '1c')
const signMsg = {
item: type,
token: paymentTokenAddress,
price: price,
salt: nonce
}
const signCfg = {
name: 'BEBoxMall',
version: '1',
contract: MALL_ADDRESS,
signer: buyerAddress,
types: {
EIP712Domain: EIP721_DOMAIN_DATA,
set: [
{ name: 'item', type: 'uint256' },
{ name: 'token', type: 'address' },
{ name: 'price', type: 'uint256' },
{ name: 'salt', type: 'uint256' }
]
}
}
const signature = await this.signData(signCfg, signMsg)
return { nonce, signature }
}
@ -216,4 +240,48 @@ export class BlockChain {
const priceStr = (price / v) + ''
return this.web3.utils.toWei(priceStr)
}
public async signData(cfg: any, msg: any) {
const netId = await this.web3.eth.getChainId()
const msgParams = JSON.stringify({
types: cfg.types,
// make sure to replace verifyingContract with address of deployed contract
primaryType: 'set',
domain: {
name: cfg.name,
version: cfg.version,
chainId: netId,
verifyingContract: cfg.contract
},
message: msg
})
const from = cfg.signer
console.log('clicked, sending personal sign req', 'from', from, msgParams)
const params = [from, msgParams]
const result: any = await this.sendCmd({
method: 'eth_signTypedData_v4',
params,
from
})
console.log(result)
return result.result
}
public async sendCmd({ method, params, from }: any) {
return new Promise((resolve, reject) => {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
this.web3.currentProvider.sendAsync({
method,
params,
from
}, async function(err: any, result: any) {
if (err) {
reject && reject(err)
return
}
resolve && resolve(result)
})
})
}
}