Skip to content

Instantly share code, notes, and snippets.

@SuperCipher
Created March 21, 2022 16:11
Show Gist options
  • Save SuperCipher/74be44777226f3465ec1bb66edfd06c8 to your computer and use it in GitHub Desktop.
Save SuperCipher/74be44777226f3465ec1bb66edfd06c8 to your computer and use it in GitHub Desktop.
recursive signature signing
SELLER_INFO_TYPE_HASH: constant(bytes32) = keccak256("SellerERC721Addresses(address addr)SellerInfo(address addr,address erc20_address,seller_erc721_addresses SellerERC721Addresses)")
# SELLER_INFO_TYPE_HASH: constant(bytes32) = keccak256("SellerInfo(address addr,address erc20_address)")
SELLER_ERC721_ADDRESSES_TYPE_HASH: constant(bytes32) = keccak256("SellerERC721Addresses(address addr)")
@external
def checkSellerSignature(_sellers_signing_account:address, _signature: Bytes[65], _seller_address: address, _seller_ERC20_address: address, _seller_info: Seller_Info) -> bytes32:
assert _seller_address != ZERO_ADDRESS, "invalid _seller_address"
assert _seller_ERC20_address != ZERO_ADDRESS, "invalid _seller_ERC20_address"
assert _seller_info.erc721_addresses[0].nft_address == 0x0FD4C4Ef9Bbe66217Eb790E5D42A5cC103eeFC90
assert _seller_info.erc721_addresses[0].price == 5
assert _seller_info.erc721_addresses[0].weight == 1
assert _seller_address == 0x0063046686E46Dc6F15918b61AE2B121458534a5
# assert _seller_ERC20_address ==
digest: bytes32 = keccak256(
concat(
b'\x19\x01',
self.DOMAIN_SEPARATOR,
keccak256(
concat(
SELLER_INFO_TYPE_HASH,
convert(_seller_address, bytes32),
convert(_seller_ERC20_address, bytes32),
keccak256(
concat(
SELLER_ERC721_ADDRESSES_TYPE_HASH,
convert(_seller_info.erc721_addresses[0].nft_address, bytes32),
# convert(_seller_info.erc721_addresses[0].price, bytes32),
# convert(_seller_info.erc721_addresses[0].weight,bytes32),
)
),
)
)
)
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment