diff --git a/CHANGELOG.md b/CHANGELOG.md index 0290e02..211ad16 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,15 @@ Please follow [https://changelog.md/](https://changelog.md/) conventions. - Update surya doc by running the 3 scripts in [./doc/script](./doc/script) - Update changelog +## v0.2.0 + ## v0.1.0 First release ! + +- Update Rules to CMTAT v3.0.0 and latest RuleEngine version + +- Use [EnumerableSet](https://docs.openzeppelin.com/contracts/5.x/api/utils#EnumerableSet) from OpenZeppelin to store address status for blacklist and whitelist rules. +- Add function `canTransferFrom`, `detectTransferRestrictionFrom` which takes the spender argument +- Add functions `canTransfer`, `canTransferFrom`, `detectTransferRestriction`,`detectTransferRestrictionFrom` which takes the `tokenId` argument. +- Add support of [ERC-165](https://eips.ethereum.org/EIPS/eip-165) in each rule. diff --git a/README.md b/README.md index 92e0b5f..1b31c2d 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Each rule can be used **standalone**, directly plugged into a CMTAT token, **or* ## Overview -The **RuleEngine** is an external smart contract that applies transfer restrictions to security tokens such as **CMTAT** or ERC-3643-compatible tokens through a RuleEngine. +The **RuleEngine** is an external smart contract that applies transfer restrictions to security tokens such as **CMTAT** or [ERC-3643](https://eips.ethereum.org/EIPS/eip-3643)-compatible tokens through a RuleEngine. Rules are modular validator contracts that the `RuleEngine` or `CMTAT` compatible token can call on every transfer to ensure regulatory and business-logic compliance. ### Key Concepts @@ -47,6 +47,30 @@ However, contrary to the RuleEngine, the whole interface is currently not implem The alternative to use a Rule with an ERC-3643 token is trough the RuleEngine, which implements the whole `ICompliance` interface. +### ERC-721/ERC-1155 + +To improve compatibility with [ERC-721](https://eips.ethereum.org/EIPS/eip-721) and [ERC-1155](https://eips.ethereum.org/EIPS/eip-1155), the rule implements the interface `IERC7943NonFungibleComplianceExtend` which includes compliance functions with the `tokenId` argument. + +While no rules currently apply restriction on the token id, this interface can be used to implement flexible restriction on ERC-721 or ERC-1155 tokens. + +```solidity +// IERC7943NonFungibleCompliance interface +// Read-only functions +function canTransfer(address from, address to, uint256 tokenId, uint256 amount)external view returns (bool allowed) + +// IERC7943NonFungibleComplianceExtend interface +// Read-only functions +function detectTransferRestriction(address from, address to, uint256 tokenId, uint256 amount)external view returns (uint8 code); +function detectTransferRestrictionFrom(address spender, address from, address to, uint256 tokenId, uint256 value)external view returns (uint8 code); +function canTransferFrom(address spender, address from, address to, uint256 tokenId, uint256 value)external returns (bool allowed); + +// State modifying functions (write) +function transferred(address from, address to, uint256 tokenId, uint256 value) external; +function transferred(address spender, address from, address to, uint256 tokenId, uint256 value) external; +``` + + + ## Architecture ### Rule - Code list