Skip to content

Commit

Permalink
Merge pull request #28 from axieinfinity/implement-feature/wallet/wal…
Browse files Browse the repository at this point in the history
…let-signing

feat(wallet): implement `wallet-signing`
  • Loading branch information
TuDo1403 committed Dec 28, 2023
2 parents 2808c86 + edff367 commit 7c696b0
Show file tree
Hide file tree
Showing 2 changed files with 117 additions and 0 deletions.
93 changes: 93 additions & 0 deletions script/configs/WalletConfig.sol
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,99 @@ abstract contract WalletConfig is CommonBase, IWalletConfig {
return "DEPLOYER";
}

function ethSignMessage(address by, string memory message, WalletOption walletOption)
public
returns (bytes memory sig)
{
sig =
walletOption == WalletOption.Env ? envEthSignMessage(by, message, _envLabel) : trezorEthSignMessage(by, message);
}

function ethSignMessage(string memory message) public returns (bytes memory sig) {
sig = _walletOption == WalletOption.Env
? envEthSignMessage(_envSender, message, _envLabel)
: trezorEthSignMessage(_trezorSender, message);
}

function envEthSignMessage(address by, string memory message, string memory envLabel)
public
returns (bytes memory sig)
{
string[] memory commandInput = new string[](8);
commandInput[0] = "cast";
commandInput[1] = "wallet";
commandInput[2] = "sign";
commandInput[3] = "--from";
commandInput[4] = vm.toString(by);
commandInput[5] = "--private-key";
commandInput[6] = LibString.toHexString(_loadENVPrivateKey(envLabel));
commandInput[7] = message;

sig = vm.ffi(commandInput);
}

function trezorEthSignMessage(address by, string memory message) public returns (bytes memory sig) {
string[] memory commandInput = new string[](7);
commandInput[0] = "cast";
commandInput[1] = "wallet";
commandInput[2] = "sign";
commandInput[3] = "--from";
commandInput[4] = vm.toString(by);
commandInput[5] = "--trezor";
commandInput[6] = message;

sig = vm.ffi(commandInput);
}

function signTypedDataV4(address by, string memory filePath, WalletOption walletOption)
public
returns (bytes memory sig)
{
sig = walletOption == WalletOption.Env
? envSignTypedDataV4(by, filePath, _envLabel)
: trezorSignTypedDataV4(by, filePath);
}

function signTypedDataV4(string memory filePath) public returns (bytes memory sig) {
sig = _walletOption == WalletOption.Env
? envSignTypedDataV4(_envSender, filePath, _envLabel)
: trezorSignTypedDataV4(_trezorSender, filePath);
}

function envSignTypedDataV4(address by, string memory filePath, string memory envLabel)
public
returns (bytes memory sig)
{
string[] memory commandInput = new string[](10);
commandInput[0] = "cast";
commandInput[1] = "wallet";
commandInput[2] = "sign";
commandInput[3] = "--from";
commandInput[4] = vm.toString(by);
commandInput[5] = "--private-key";
commandInput[6] = LibString.toHexString(_loadENVPrivateKey(envLabel));
commandInput[7] = "--data";
commandInput[8] = "--from-file";
commandInput[9] = filePath;

sig = vm.ffi(commandInput);
}

function trezorSignTypedDataV4(address by, string memory filePath) public returns (bytes memory sig) {
string[] memory commandInput = new string[](9);
commandInput[0] = "cast";
commandInput[1] = "wallet";
commandInput[2] = "sign";
commandInput[3] = "--from";
commandInput[4] = vm.toString(by);
commandInput[5] = "--trezor";
commandInput[6] = "--data";
commandInput[7] = "--from-file";
commandInput[8] = filePath;

sig = vm.ffi(commandInput);
}

function _loadTrezorAccount() internal {
if (tx.origin != DEFAULT_SENDER) {
_trezorSender = tx.origin;
Expand Down
24 changes: 24 additions & 0 deletions script/interfaces/configs/IWalletConfig.sol
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,28 @@ interface IWalletConfig {
function trezorPrefix() external view returns (string memory);

function deployerEnvLabel() external view returns (string memory);

function ethSignMessage(address by, string memory message, WalletOption walletOption)
external
returns (bytes memory sig);

function ethSignMessage(string memory message) external returns (bytes memory sig);

function envEthSignMessage(address by, string memory message, string memory envLabel)
external
returns (bytes memory sig);

function envSignTypedDataV4(address by, string memory filePath, string memory envLabel)
external
returns (bytes memory sig);

function trezorEthSignMessage(address by, string memory message) external returns (bytes memory sig);

function trezorSignTypedDataV4(address by, string memory filePath) external returns (bytes memory sig);

function signTypedDataV4(address by, string memory filePath, WalletOption walletOption)
external
returns (bytes memory sig);

function signTypedDataV4(string memory filePath) external returns (bytes memory sig);
}

0 comments on commit 7c696b0

Please sign in to comment.