generated from proofoftom/buidler-waffle-typechain-quasar
-
Notifications
You must be signed in to change notification settings - Fork 91
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
8 changed files
with
161 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
build | ||
node_modules |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
# Common clr.fund utility functions used by contracts and vue-app |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
{ | ||
"name": "@clrfund/common", | ||
"version": "0.0.1", | ||
"description": "Common utility functions used by clrfund scripts and app", | ||
"main": "src/index", | ||
"scripts": { | ||
"build": "tsc", | ||
"lint": "eslint 'src/**/*.ts'", | ||
"clean": "rm -rf build" | ||
}, | ||
"license": "GPL-3.0", | ||
"devDependencies": { | ||
"eslint": "^8.31.0", | ||
"typescript": "^4.9.3" | ||
}, | ||
"dependencies": { | ||
"ethers": "^5.7.2" | ||
}, | ||
"repository": { | ||
"type": "git", | ||
"url": "git+https://github.com/clrfund/monorepo.git" | ||
}, | ||
"author": "", | ||
"bugs": { | ||
"url": "https://github.com/clrfund/monorepo/issues" | ||
}, | ||
"homepage": "https://github.com/clrfund/monorepo#readme" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
import { providers } from 'ethers' | ||
|
||
export interface Block { | ||
blockNumber: number | ||
hash: string | ||
stateRoot: string | ||
} | ||
|
||
/* | ||
* get the block stateRoot using eth_getBlockByHash | ||
*/ | ||
export async function getBlock( | ||
blockNumber: number, | ||
provider: providers.JsonRpcProvider | ||
): Promise<Block> { | ||
const block = await provider.getBlock(blockNumber) | ||
const blockParams = [block.hash, false] | ||
const rawBlock = await provider.send('eth_getBlockByHash', blockParams) | ||
return { blockNumber, hash: block.hash, stateRoot: rawBlock.stateRoot } | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
export * from './block' | ||
export * from './proof' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
import { utils, providers } from 'ethers' | ||
|
||
/** | ||
* RLP encode the proof returned from eth_getProof | ||
* @param proof proof from the eth_getProof | ||
* @returns | ||
*/ | ||
export function rlpEncodeProof(proof: string[]) { | ||
const decodedProof = proof.map((node: string) => utils.RLP.decode(node)) | ||
|
||
return utils.RLP.encode(decodedProof) | ||
} | ||
|
||
/** | ||
* The storage key used in eth_getProof and eth_getStorageAt | ||
* @param account Account address | ||
* @param slotIndex Slot index of the balanceOf storage | ||
* @returns storage key used in the eth_getProof params | ||
*/ | ||
export function getStorageKey(account: string, slotIndex: number) { | ||
return utils.keccak256( | ||
utils.concat([ | ||
utils.hexZeroPad(account, 32), | ||
utils.hexZeroPad(utils.hexValue(slotIndex), 32), | ||
]) | ||
) | ||
} | ||
|
||
/** | ||
* Get proof from eth_getProof | ||
* @param params Parameter fro eth_getProof | ||
* @returns proof returned from eth_getProof | ||
*/ | ||
async function getProof( | ||
params: Array<string | string[]>, | ||
provider: providers.JsonRpcProvider | ||
): Promise<any> { | ||
try { | ||
const proof = await provider.send('eth_getProof', params) | ||
return proof | ||
} catch (err) { | ||
console.error( | ||
'Unable to get proof. Your node may not support eth_getProof. Try a different provider such as Infura', | ||
err | ||
) | ||
throw err | ||
} | ||
} | ||
/** | ||
* Get the storage proof | ||
* @param token Token contract address | ||
* @param blockHash The block hash to get the proof for | ||
* @param provider provider to connect to the node | ||
* @returns proof returned from eth_getProof | ||
*/ | ||
export async function getAccountProof( | ||
token: string, | ||
blockHash: string, | ||
provider: providers.JsonRpcProvider | ||
): Promise<any> { | ||
const params = [token, [], blockHash] | ||
return getProof(params, provider) | ||
} | ||
|
||
/** | ||
* Get the storage proof | ||
* @param token Token contract address | ||
* @param blockHash The block hash to get the storage proof for | ||
* @param userAccount User account to get the proof for | ||
* @param storageSlotIndex The storage index for the balanceOf storage | ||
* @param provider provider to connect to the node | ||
* @returns proof returned from eth_getProof | ||
*/ | ||
export async function getStorageProof( | ||
token: string, | ||
blockHash: string, | ||
userAccount: string, | ||
storageSlotIndex: number, | ||
provider: providers.JsonRpcProvider | ||
): Promise<any> { | ||
const storageKey = getStorageKey(userAccount, storageSlotIndex) | ||
|
||
const params = [token, [storageKey], blockHash] | ||
return getProof(params, provider) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
{ | ||
"compilerOptions": { | ||
"skipLibCheck": true, | ||
"experimentalDecorators": true, | ||
"alwaysStrict": true, | ||
"noImplicitAny": false, | ||
"forceConsistentCasingInFileNames": true, | ||
"noUnusedLocals": false, | ||
"noUnusedParameters": false, | ||
"noImplicitReturns": true, | ||
"noFallthroughCasesInSwitch": true, | ||
"sourceMap": true, | ||
"strict": true, | ||
"outDir": "./build", | ||
"target": "es2018", | ||
"esModuleInterop": true, | ||
"module": "commonjs", | ||
"declaration": true | ||
}, | ||
"exclude": ["node_modules/**"], | ||
"include": ["./src"] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters