关于\x19\x01的签名调用

写在前面:使用\x19\x01的签名方式进行调用

1.VerifyEIP712.sol

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.3;

import "../libraries/LibBytes.sol";

abstract contract VerifyEIP712 {
   

  using LibBytes for bytes;

    struct EIP712Domain {
   
        string  name;
        string  version;
        uint256 chainId;
        address verifyingContract;
    }

    struct VerifyClaim{
   
        bytes32 payload;
        uint64 nextNonce;  
        address sigAddr;
    }

    bytes32 public constant EIP712DOMAIN_TYPEHASH = keccak256(
        "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
    );

    bytes32 public constant VERIFYCLAIM_TYPEHASH = keccak256(
        "VerifyClaim(bytes32 payload,uint64 nextNonce,address sigAddr)"
    );

    bytes32 public immutable DOMAIN_SEPARATOR = hash(EIP712Domain({
   
            name: "Test",
            version: "v1",
            chainId: getChainID(),
            verifyingContract: address(this)
        }));

    function getChainID() internal view returns (uint256) {
   
        uint256 chainId;
        assembly {
   
            chainId := chainid()
        }
        return chainId;
    }

    function hash(EIP712Domain memory eip712Domain) internal pure returns (bytes32) {
   
        return keccak256(abi.encode(
            EIP712DOMAIN_TYPEHASH,
            keccak256(bytes(eip712Domain.name)),
            keccak256(bytes(eip712Domain.version)),
            eip712Domain.chainId,
            eip712Domain.verifyingContract
        ));
    }

    function hash(VerifyClaim memory verifyclaim) internal pure returns (bytes32) {
   
        re
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 我没有编写围棋C的经验,但我可以尽力给你一些建议。首先,你需要了解围棋C的规则和术语,以便编写程序时更容易理解。其次,你可以搜索有关编写围棋C程序的文章和论坛,以获得有关编程的更多信息。最后,你可以编写一些测试程序来检查你的代码是否正确。 ### 回答2: 编写一个19x19围棋的C程序可以分为几个主要步骤。首先是创建一个19x19的棋盘,用二维数组来表示,每个元素可以是黑子、白子或者空白位置。然后是实现棋盘的绘制功能,可以用字符图形来显示棋盘的状态。接下来是落子的功能,让两位玩家轮流输入落子的位置,程序会验证是否合法并更新棋盘状态。最后是判断游戏结束的条件,即棋盘已满或者有一方连成五个子的线。 下面是一个基本的程序结构: ```c #include <stdio.h> #define SIZE 19 // 定义棋盘大小 char board[SIZE][SIZE]; //声明棋盘 void initBoard() { // 初始化棋盘 for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { board[i][j] = ' '; } } } void drawBoard() { // 绘制棋盘 for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { printf("%c ", board[i][j]); } printf("\n"); } } int isValidMove(int x, int y) { // 验证落子是否合法 if (x < 0 || x >= SIZE || y < 0 || y >= SIZE) { return 0; // 越界 } if (board[x][y] != ' ') { return 0; // 已有子 } return 1; } int isGameOver() { // 判断游戏是否结束 // TODO: 检查是否有一方连成五个子的线 } int main() { initBoard(); // 初始化棋盘 while (!isGameOver()) { drawBoard(); // 绘制棋盘 int x, y; printf("请玩家输入落子位置:"); scanf("%d %d", &x, &y); if (isValidMove(x, y)) { // 验证落子是否合法 board[x][y] = 'X'; // 假设当前是黑子 } } drawBoard(); // 绘制最终棋盘 printf("游戏结束!\n"); return 0; } ``` 这只是一个简单的固定大小的围棋程序,可以进一步扩展以实现更复杂的功能,例如加入判断输赢、禁手规则、人机对战等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

戎码江湖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值