Back

blockchain - solidity 类型转换:int to string, 字符串连接 string concat

发布时间: 2022-07-09 00:43:00

refer to : https://stackoverflow.com/questions/47129173/how-to-convert-uint-to-string-in-solidity

solidity 默认不支持对字符串做处理。

解决办法:

int to string:

solidity ^0.8.0

import "@openzeppelin/contracts/utils/Strings.sol";

Strings.toString(myUINT)

拼接:(可以一次性拼接好多个 小字符串)

https://dev.to/hannudaniel/concatenate-two-strings-on-the-blockchain-using-solidity-smart-contracts-new-feature-in-v0812-549g

// <= 0.8.11
string(abi.encodePacked(text,added_text));   // 可以一次性传入多个参数
// > 0.8.11  
string.concat(text,added_text);   // 同上

完整例子:

pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/utils/Counters.sol";

import "@openzeppelin/contracts/utils/Strings.sol";

contract VeryGoodNftWithMoreClearMessage is ERC721URIStorage {

  uint256 private _currentId = 0;
  address public rootAddress = address(0);
  uint256 public _maxSupply = 3;

  event Minted(address to, uint256 nftId, address minter);

  modifier shouldLessThanMaxSupply(){

    // 在这里进行 int 与 string的转换, 字符串的拼接
    string memory message = string(abi.encodePacked("Reached max supply:(_maxSupply: ", Strings.toString(_maxSupply), ", _currentId: ", Strings.toString(_currentId), "), no available nft left" ));
    require( _currentId < _maxSupply, message);
    _;
  }

  constructor() ERC721("VeryGoodNftWithMoreClearMessage", "VGN") {
    rootAddress = msg.sender;
  }

  function mint(address to) external shouldLessThanMaxSupply{
    uint256 nftId = _currentId + 1;
    _mint(to, nftId);
    _currentId = nftId;
    address from = msg.sender;
    emit Minted(to, nftId, from);
  }
}

Back