1.0.2 • Published 2 years ago

@dea-sg/meta-tx v1.0.2

Weekly downloads
-
License
MPL-2.0
Repository
-
Last release
2 years ago

meta transaction library

This library is used when using meta-transactions. Please feel free to use at your own risk.

how to use

Execute the following command to install.

yarn add @dea-sg/meta-tx
or
npm install @dea-sg/meta-tx

After deploying ForwarderUpgradeable with proxy(uups), the deployer should execute the following function. name and version are required for authentication.You can refer to test/forward.ts to find out.

await forwarder.initialize('forwarder', '1.0.0')

After deploying ForwarderAccessControlUpgradeable with proxy(uups), the deployer should execute the following function. Set the forwarder address to the address of the contract executing the metatransaction.

await control.initialize()
const forwarderRole = await control.FORWARDER_ROLE()
await control.grantRole(forwarderRole, {forwarder address})
const hasRole = await control.isTrustedForwarder({forwarder address})
console.log(hasRole)
>> True

Inheriting MetaTxContextUpgradeable changes the function of the _msgSender of the contract executed from the metatransaction and changes the sender to the intended one. The ForwarderAccessControl address must be set in initialize.

import "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol";
import "@dea-sg/meta-tx/contracts/context/MetaTxContextUpgradeable.sol";

contract ExampleToken is
	ERC20Upgradeable,
	MetaTxContextUpgradeable
{
	bytes public currentData;
	function initialize(address _control) public initializer {
		__ERC20_init("token", "TOKEN");
		__MetaTxContextUpgradeable_init(_control);
	}

	function _msgSender()
		internal
		view
		override(ContextUpgradeable, MetaTxContextUpgradeable)
		returns (address sender)
	{
		return MetaTxContextUpgradeable._msgSender();
	}

	function _msgData()
		internal
		view
		override(ContextUpgradeable, MetaTxContextUpgradeable)
		returns (bytes memory)
	{
		return MetaTxContextUpgradeable._msgData();
	}
}

After deploying, do not forget to execute initialize function.

await example.initialize(control.address)

You can see how to execute the metatransaction in test/forward.ts.

For Developers

The development environment can be created by executing the following commands.

yarn
yarn build
yarn test
1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago

0.2.0

2 years ago

0.1.1

2 years ago

0.1.0

2 years ago

0.0.4

2 years ago

0.0.3

2 years ago

0.0.2

2 years ago