// 署名者のアドレス
let signerAddress = "0xfC12b50bD2D04d3754BfC1cFB6c303fb9EAcA118"
// 署名の flat-format 表現(65 bytes)
let signature = "0x1e15f8b126addb29b968f56034cf57094fb2845bb55ad888d4dfca5eb3472ce241bb1d04dcf78999ddd7c6c01525c99ae66272dbd09aefd215161189fe36f0ed1c"
// 署名したメッセージ
let message = "piyopiyo!"
// メッセージのバイト列を取得
let messageBytes = ethers.utils.toUtf8Bytes(message)
// メッセージの Keccak ハッシュ値を取得
let messageDigest = ethers.utils.keccak256(messageBytes)
// 署名検証
// 署名者のアドレスが得られる
let recoveredAddress = ethers.utils.recoverAddress(messageDigest, signature)
console.log(recoveredAddress)
if (signerAddress === recoveredAddress){
console.log("Signature is verified!")
}