Skip to content

Commit

Permalink
chore(deps): bump ethers (#1242)
Browse files Browse the repository at this point in the history
BREAKING CHANGE: now using ethers v6 as a dependency which may need extra attention when merging. The output of `eth_signTransaction` algorithms may be slightly different as transactions are by default infered as type 1 (EIP1559)
  • Loading branch information
fermentfan authored and mirceanis committed Oct 23, 2023
1 parent 977662a commit f5dcdf2
Show file tree
Hide file tree
Showing 26 changed files with 254 additions and 233 deletions.
2 changes: 1 addition & 1 deletion __tests__/shared/didManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ export default (testContext: {
expect(identifier.controllerKeyId).toEqual(identifier.keys[0].kid)
})

it('should create identifier using chainId 3', async () => {
it('should translate identifier using chainId 421613 to arbitrum', async () => {
identifier = await agent.didManagerCreate({
provider: 'did:ethr',
options: {
Expand Down
45 changes: 35 additions & 10 deletions __tests__/shared/keyManager.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
// noinspection ES6PreferShortImport

import { IAgentOptions, IDIDManager, IKeyManager, IResolver, TAgent, TKeyType } from '../../packages/core/src'
import { computeAddress, serialize } from '@ethersproject/transactions'
import { mapIdentifierKeysToDoc } from '../../packages/utils/src'
import { recoverTypedSignature, SignTypedDataVersion } from '@metamask/eth-sig-util'
import {computeAddress, Transaction} from "ethers";

type ConfiguredAgent = TAgent<IDIDManager & IKeyManager & IResolver>

Expand Down Expand Up @@ -222,7 +222,7 @@ export default (testContext: {
const rawTx = await agent.keyManagerSignEthTX({
kid: key.kid,
transaction: {
to: '0xce31a19193d4b23f4e9d6163d7247243bAF801c3',
to: '0xcE31a19193D4b23F4E9D6163d7247243BAF801C3',
value: 300000,
gasLimit: 43092000,
gasPrice: 20000000000,
Expand All @@ -243,7 +243,7 @@ export default (testContext: {
const rawTx = await agent.keyManagerSignEthTX({
kid: key.kid,
transaction: {
to: '0xce31a19193d4b23f4e9d6163d7247243bAF801c3',
to: '0xcE31a19193D4b23F4E9D6163d7247243BAF801C3',
from: keyAddress,
value: 300000,
gasLimit: 43092000,
Expand All @@ -266,8 +266,8 @@ export default (testContext: {
agent.keyManagerSignEthTX({
kid: key.kid,
transaction: {
to: '0xce31a19193d4b23f4e9d6163d7247243bAF801c3',
from: '0xce31a19193d4b23f4e9d6163d7247243bAF801c3',
to: '0xcE31a19193D4b23F4E9D6163d7247243BAF801C3',
from: '0xcE31a19193D4b23F4E9D6163d7247243BAF801C3',
value: 300000,
gasLimit: 43092000,
gasPrice: 20000000000,
Expand Down Expand Up @@ -351,15 +351,15 @@ export default (testContext: {
const rawTx = await agent.keyManagerSignEthTX({
kid: importedKey.kid,
transaction: {
to: '0xce31a19193d4b23f4e9d6163d7247243bAF801c3',
to: '0xcE31a19193D4b23F4E9D6163d7247243BAF801C3',
value: 300000,
gasLimit: 43092000,
gasPrice: 20000000000,
nonce: 1,
},
})
expect(rawTx).toEqual(
'0xf869018504a817c800840291882094ce31a19193d4b23f4e9d6163d7247243baf801c3830493e0801ba0f16e2206290181c3feaa04051dad19089105c24339dbdf0d80147b48a59fa152a0770e8751ec77ccc78e8b207023f168444f7cfb67055c55c70ef75234458a3d51',
'0x01f86b80018504a817c800840291882094ce31a19193d4b23f4e9d6163d7247243baf801c3830493e080c001a05a46cdfe2102e81e90f89d8896ddaf32aee5473bad994bc1767f0d2af9afa160a01c028daaf737d69f6933d2dfef5e739f459cfb9e8ce1d9ba9ea7bb0c6006518c',
)
})

Expand All @@ -376,14 +376,39 @@ export default (testContext: {
})

it('should sign EthTX using generic signer', async () => {
const txData = serialize({
to: '0xce31a19193d4b23f4e9d6163d7247243bAF801c3',
const transaction = new Transaction()
transaction.to = '0xcE31a19193D4b23F4E9D6163d7247243BAF801C3'
transaction.value = 300000
transaction.gasLimit = 43092000
transaction.gasPrice = 20000000000
transaction.nonce = 1

const txData = transaction.unsignedSerialized

const rawTx = await agent.keyManagerSign({
algorithm: 'eth_signTransaction',
data: txData,
encoding: 'hex',
keyRef: importedKey.kid,
})

expect(rawTx).toEqual(
'0x01f86b80018504a817c800840291882094ce31a19193d4b23f4e9d6163d7247243baf801c3830493e080c001a05a46cdfe2102e81e90f89d8896ddaf32aee5473bad994bc1767f0d2af9afa160a01c028daaf737d69f6933d2dfef5e739f459cfb9e8ce1d9ba9ea7bb0c6006518c',
)
})

it('should sign EthTX using generic signer and specific type', async () => {
const transaction = Transaction.from({
to: '0xcE31a19193D4b23F4E9D6163d7247243BAF801C3',
value: 300000,
gasLimit: 43092000,
gasPrice: 20000000000,
nonce: 1,
type: 0, // enforce legacy serialization
})

const txData = transaction.unsignedSerialized

const rawTx = await agent.keyManagerSign({
algorithm: 'eth_signTransaction',
data: txData,
Expand All @@ -392,7 +417,7 @@ export default (testContext: {
})

expect(rawTx).toEqual(
'0xf869018504a817c800840291882094ce31a19193d4b23f4e9d6163d7247243baf801c3830493e0801ba0f16e2206290181c3feaa04051dad19089105c24339dbdf0d80147b48a59fa152a0770e8751ec77ccc78e8b207023f168444f7cfb67055c55c70ef75234458a3d51',
'0xf869018504a817c800840291882094ce31a19193d4b23f4e9d6163d7247243baf801c3830493e0801ba0f16e2206290181c3feaa04051dad19089105c24339dbdf0d80147b48a59fa152a0770e8751ec77ccc78e8b207023f168444f7cfb67055c55c70ef75234458a3d51',
)
})
})
Expand Down
27 changes: 14 additions & 13 deletions __tests__/utils/ethers-provider.ts
Original file line number Diff line number Diff line change
@@ -1,34 +1,35 @@
import { Web3Provider, ExternalProvider } from '@ethersproject/providers'
import { Wallet } from '@ethersproject/wallet'
import { BrowserProvider, Eip1193Provider, Wallet } from 'ethers'

export function createEthersProvider(): Web3Provider {
export function createEthersProvider(): BrowserProvider {
const privateKeyHex = '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db'
const wallet = new Wallet(privateKeyHex)
const mockProvider = new MockWeb3Provider(wallet)
const provider = new Web3Provider(mockProvider)
const provider = new BrowserProvider(mockProvider)
return provider
}

class MockWeb3Provider implements Eip1193Provider {
constructor(private wallet: Wallet) {}

class MockWeb3Provider implements ExternalProvider {
constructor(private wallet: Wallet){

}
async request(request: { method: string; params?: any[] }): Promise<any> {

switch(request.method) {
case 'personal_sign':
//@ts-ignore
return this.wallet.signMessage(request.params[1])
break
case 'eth_signTypedData_v4':
//@ts-ignore
case 'eth_signTypedData_v4':
// @ts-ignore
const {domain, types, message} = JSON.parse(request.params[1])
delete(types.EIP712Domain)
return this.wallet._signTypedData(domain, types, message)
return this.wallet.signTypedData(domain, types, message)
case 'eth_accounts':
return [await this.wallet.getAddress()]
case 'eth_chainId':
return "1337"
break
default:
throw Error(`not_available: method ${request.method}`)
}
}
}
}
18 changes: 7 additions & 11 deletions __tests__/utils/ganache-provider.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
import { Web3Provider } from '@ethersproject/providers'
import { Contract, ContractFactory } from '@ethersproject/contracts'
// @ts-ignore
import DidRegistryContract from 'ethr-did-registry'
import { BrowserProvider, Contract, ContractFactory } from 'ethers'
import { EthereumDIDRegistry } from 'ethr-did-resolver'
import ganache from 'ganache'

/**
* Creates a Web3Provider that connects to a local ganache instance with a bunch of known keys and an ERC1056 contract.
*
* This provider can only be used in a single test suite, because of some concurrency issues with ganache.
*/
export async function createGanacheProvider(): Promise<{ provider: Web3Provider; registry: string }> {
const provider = new Web3Provider(
export async function createGanacheProvider(): Promise<{ provider: BrowserProvider; registry: string }> {
const provider = new BrowserProvider(
ganache.provider({
logging: { quiet: true },
accounts: [
Expand Down Expand Up @@ -58,13 +56,11 @@ export async function createGanacheProvider(): Promise<{ provider: Web3Provider;
}) as any
)
await provider.ready
const factory = ContractFactory.fromSolidity(DidRegistryContract).connect(provider.getSigner(0))
const factory = ContractFactory.fromSolidity(EthereumDIDRegistry).connect(await provider.getSigner(0))

let registryContract: Contract = await factory.deploy()
registryContract = await registryContract.deployed()
registryContract = await registryContract.waitForDeployment()

await registryContract.deployTransaction.wait()

const registry = registryContract.address
const registry = await registryContract.getAddress()
return { provider, registry }
}
4 changes: 0 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,6 @@
"__browser_tests__/*"
],
"devDependencies": {
"@ethersproject/contracts": "^5.7.0",
"@ethersproject/providers": "^5.7.2",
"@ethersproject/transactions": "^5.7.0",
"@ethersproject/wallet": "^5.7.0",
"@metamask/eth-sig-util": "^5.0.0",
"@microsoft/api-documenter": "7.19.27",
"@microsoft/api-extractor": "7.33.7",
Expand Down
7 changes: 3 additions & 4 deletions packages/did-comm/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,10 @@
}
},
"dependencies": {
"@ethersproject/signing-key": "^5.7.0",
"@stablelib/ed25519": "^1.0.3",
"@veramo/core": "^4.3.0",
"@veramo/message-handler": "^4.3.0",
"@veramo/utils": "^4.3.0",
"@veramo/core": "workspace:^",
"@veramo/message-handler": "workspace:^",
"@veramo/utils": "workspace:^",
"cross-fetch": "^3.1.4",
"debug": "^4.3.3",
"did-jwt": "^6.9.0",
Expand Down
15 changes: 3 additions & 12 deletions packages/did-provider-ethr/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,10 @@
"extract-api": "pnpm exec veramo dev extract-api"
},
"dependencies": {
"@ethersproject/abstract-provider": "^5.7.0",
"@ethersproject/abstract-signer": "5.7.0",
"@ethersproject/address": "^5.7.0",
"@ethersproject/bignumber": "^5.7.0",
"@ethersproject/bytes": "^5.7.0",
"@ethersproject/properties": "^5.7.0",
"@ethersproject/providers": "^5.7.0",
"@ethersproject/signing-key": "^5.7.0",
"@ethersproject/transactions": "^5.7.0",
"@veramo/core": "^4.3.0",
"@veramo/did-manager": "^4.3.0",
"@veramo/core": "workspace:^",
"@veramo/did-manager": "workspace:^",
"debug": "^4.3.3",
"ethr-did": "^2.3.6"
"ethr-did": "^3.0.1"
},
"devDependencies": {
"@types/debug": "4.1.7",
Expand Down
Loading

0 comments on commit f5dcdf2

Please sign in to comment.