欢迎订阅专栏:3分钟Solidity--智能合约--Web3区块链技术必学
Foundry 签名
要获取此内容的最新版本,请访问 Cyfrin.io 上的 Foundry 签名(代码示例)。
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;
import "forge-std/Test.sol";
contract SignTest is Test {
// private key = 123
// public key = vm.addr(private key)
// message = "secret message"
// message hash = keccak256(message)
// vm.sign(private key, message hash)
function testSignature() public {
uint256 privateKey = 123;
// 计算给定私钥的地址。
address alice = vm.addr(privateKey);
// 测试有效签名
bytes32 messageHash = keccak256("Signed by Alice");
(uint8 v, bytes32 r, bytes32 s) = vm.sign(privateKey, messageHash);
address signer = ecrecover(messageHash, v, r, s);
assertEq(signer, alice);
// 测试无效消息
bytes32 invalidHash = keccak256("Not signed by Alice");
signer = ecrecover(invalidHash, v, r, s);
assertTrue(signer != alice);
}
}