solidity byte32转字符串日志输出学习

直接上代码:

// SPDX-License-Identifier: MIT

pragma solidity ^ 0.8.0;

abstract contract EIP712 {
    
    event LogValues(bytes32 domainSeparator, bytes32 structHash);

   
    function _hashTypedDataV4(bytes32 structHash) internal virtual returns (bytes32) {
        bytes32 domainSeparator = _domainSeparatorV4();
        emit LogValues(domainSeparator, structHash);
        return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
    }

    function bytes32ToString(bytes32 data) internal pure returns (string memory) {
        bytes memory bytesArray = new bytes(64);
        for (uint256 i = 0; i < 32; i++) {
            bytes1 char = bytes1(bytes32(uint256(data) * 2 ** (8 * i)));
            bytesArray[i * 2] = byteToHex(uint8(char) / 16);
            bytesArray[i * 2 + 1] = byteToHex(uint8(char) % 16);
        }
        return string(bytesArray);
    }

    function byteToHex(uint8 _byte) internal pure returns (bytes1) {
        if (_byte < 10) {
            return bytes1(uint8(bytes1('0')) + _byte);
        } else {
            return bytes1(uint8(bytes1('a')) + (_byte - 10));
        }
    }

}

 该代码无法直接使用

定义了一个LogValues时间

bytes32ToString需要自己实现,默认不支持

emit LogValues(domainSeparator, structHash);输出日志

posted @ 2024-06-16 23:24  若-飞  阅读(33)  评论(0)    收藏  举报