Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Tiny library with utility functions that can help with signing and verifying EIP-712 based messages

License

NotificationsYou must be signed in to change notification settings

Mrtenz/eip-712

Repository files navigation

VersionLicenseActions Statuscodecov

This is a library for Node.js and web browsers with some utility functions that can help with signing and verifyingEIP-712 based messages. It is fully written in TypeScript, and is currently only compatible with the latest specification of EIP-712 (eth_signTypedData_v4).

https://eips.ethereum.org/EIPS/eip-712

Note that this library currently does not handle the signing itself. For this, you can use something like Ethers.js or ethereumjs-util. For examples, please see theexamples folder.

Installation

You can install this library with Yarn or NPM:

$ yarn add eip-712
$ npm install eip-712

There is a CommonJS version as well as an ES6 version available. Most tools should automatically pick the right version (e.g. Node.js, Webpack).

Getting Started

First, define your typed data as a JSON object, according to the JSON schema specified by EIP-712. For example:

{"types": {"EIP712Domain": [      {"name":"name","type":"string" },      {"name":"version","type":"string" },      {"name":"chainId","type":"uint256" },      {"name":"verifyingContract","type":"address" }    ],"Person": [      {"name":"name","type":"string" },      {"name":"wallet","type":"address" }    ],"Mail": [      {"name":"from","type":"Person" },      {"name":"to","type":"Person" },      {"name":"contents","type":"string" }    ]  },"primaryType":"Mail","domain": {"name":"Ether Mail","version":"1","chainId":1,"verifyingContract":"0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC"  },"message": {"from": {"name":"Cow","wallet":"0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826"    },"to": {"name":"Bob","wallet":"0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB"    },"contents":"Hello, Bob!"  }}

Functions

Here is a brief description of the functions available in this library. For more detailed examples, you can refer tosrc/eip-712.test.ts, or to the examples in theexamples folder.

getMessage(typedData, hash?)

This function will return the full EIP-191 encoded message to be signed as Buffer, for the typed data specified. Ifhash is enabled, the message will be hashed using Keccak256.

import{getMessage}from'eip-712';consttypedData={/*...*/};console.log(getMessage(typedData).toString('hex'));// 1901f2cee375fa42b42143804025fc449deafd50cc031ca257e0b194a650a912090fc52c0ee5d84264471806290a3f2c4cecfc5490626bf912d01f240d7a274b371econsole.log(getMessage(typedData,true).toString('hex'));// be609aee343fb3c4b28e1df9e632fca64fcfaede20f02e86244efddf30957bd2

asArray(typedData)

This function returns the typed data as an array. This can be useful for encoding typed data as ABI.

import{asArray}from'eip-712';consttypedData={/*...*/};console.log(asArray(typedData));// [ ['Cow', '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826'], ['Bob', '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB'], 'Hello, Bob!' ]

getStructHash(typedData, type, data)

This function returns a Keccak-256 hash for a single struct type (e.g. EIP712Domain, Person or Mail).

import{getStructHash}from'eip-712';consttypedData={/*...*/};console.log(getStructHash(typedData,'EIP712Domain',typedData.domain).toString('hex'));// f2cee375fa42b42143804025fc449deafd50cc031ca257e0b194a650a912090f

encodeData(typedData, type, data)

This function returns the raw ABI encoded data for the struct type.

import{encodeData}from'eip-712';consttypedData={/*...*/};console.log(encodeData(typedData,'EIP712Domain',typedData.domain).toString('hex'));// 8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400fc70ef06638535b4881fafcac8287e210e3769ff1a8e91f1b95d6246e61e4d3c6c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc60000000000000000000000000000000000000000000000000000000000000001000000000000000000000000cccccccccccccccccccccccccccccccccccccccc

getTypeHash(typedData, type)

This function returns the type hash for a struct type. This is the same asKeccak256(EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)), with optional sub-types automatically included too.

import{getTypeHash}from'eip-712';consttypedData={/*...*/};console.log(getTypeHash(typedData,'EIP712Domain').toString('hex'));// 8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f

encodeType(typedData, type)

This function returns the type before hashing it, e.g.EIP712Domain(string name,string version,uint256 chainId,address verifyingContract), with optional sub-types automatically included too.

import{encodeType}from'eip-712';consttypedData={/*...*/};console.log(encodeType(typedData,'EIP712Domain'));// EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)

getDependencies(typedData, type)

This function returns all sub-types used by a struct as a string array. If the struct has no sub-types (likeEIP712Domain), an array with only the type itself is returned.

import{getDependencies}from'eip-712';consttypedData={/*...*/};console.log(getDependencies(typedData,'EIP712Domain'));// ['EIP712Domain']console.log(getDependencies(typedData,'Mail'));// ['Mail', 'Person']

Non-standard domains (e.g., CIP-23)

It's possible to use a custom domain format, like from the CIP-23 specification, or to disable verifying the domain format completely, if you want to use a custom implementation of EIP-712.

To do this, you can pass options to each function, as last parameter. For example, in order to get the message hash for a message, you can do the following:

import{getMessage}from'eip-712';importtype{Options}from'eip-712';consttypedData={/*...*/};constoptions:Options={// A custom domain identifier. Defaults to 'EIP712Domain'.domain:'CIP23Domain',// Whether to verify the structure of the domain. Defaults to 'true'.verifyDomain:false};console.log(getMessage(typedData,true,options).toString('hex'));

About

Tiny library with utility functions that can help with signing and verifying EIP-712 based messages

Topics

Resources

License

Stars

Watchers

Forks


[8]ページ先頭

©2009-2025 Movatter.jp