diff --git a/README.md b/README.md index d261ceaa..62162be8 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,24 @@ Please see the OpenZeppelin [Upgrades plugins](https://docs.openzeppelin.com/upg Note that deployment via a proxy is not mandatory, but is recommended by CMTA. + +#### Factory + +Factory contracts are available to deploy the CMTAT with a beacon proxy or a transparent proxy. + +[CMTAT_BEACON_FACTORY.sol](./contracts/deployment/CMTAT_BEACON_FACTORY.sol) + +[CMTAT_TRANSPARENT_FACTORY.sol](./contracts/deployment/CMTAT_TRANSPARENT_FACTORY.sol) + +Beacon Proxy factory: the factory will use the same beacon for each beacon proxy. This beacon provides the address of the implementation contract, a CMTAT_PROXY contract. If you upgrade the beacon to point to a new implementation, it will change the implementation contract for all beacon proxy. + +![factory-Beacon Factory.drawio](./doc/schema/drawio/factory-Beacon Factory.drawio.png) + +Transparent Proxy factory: the factory will use the same implementation for each transparent proxy deployed. Each transparent proxy has its owned proxy admin, deployed inside the constructor of the transparent proxy. Each transparent proxy can upgrade their implementation to a new one independently and without impact on other proxies. + +![factory-Transparent Factory.drawio](./doc/schema/drawio/factory-Transparent Factory.drawio.png) + + ### Gasless support The CMTAT supports client-side gasless transactions using the [Gas Station Network](https://docs.opengsn.org/#the-problem) (GSN) pattern, the main open standard for transfering fee payment to another account than that of the transaction issuer. The contract uses the OpenZeppelin contract `ERC2771ContextUpgradeable`, which allows a contract to get the original client with `_msgSender()` instead of the fee payer given by `msg.sender` while allowing upgrades on the main contract (see *Deployment via a proxy* above). diff --git a/doc/schema/drawio/factory-Beacon Factory.drawio.png b/doc/schema/drawio/factory-Beacon Factory.drawio.png new file mode 100644 index 00000000..081a661d Binary files /dev/null and b/doc/schema/drawio/factory-Beacon Factory.drawio.png differ diff --git a/doc/schema/drawio/factory-Transparent Factory.drawio.png b/doc/schema/drawio/factory-Transparent Factory.drawio.png new file mode 100644 index 00000000..d128640b Binary files /dev/null and b/doc/schema/drawio/factory-Transparent Factory.drawio.png differ diff --git a/doc/schema/drawio/factory.drawio b/doc/schema/drawio/factory.drawio new file mode 100644 index 00000000..cf0b6088 --- /dev/null +++ b/doc/schema/drawio/factory.drawio @@ -0,0 +1 @@ +3Zldd5owGMc/DZft4b166Uvdes46Xdt17W56IkTgDAgLsWo//RIIb4nW6lTcriT/hJA8/1+eBFSMQbT8hEHi3yIXhoquukvFGCq6rhmWTn+YssqVrq3lgocDlzeqhPvgDXJR5eo8cGHaaEgQCkmQNEUHxTF0SEMDGKNFs9kMhc2nJsCDknDvgFBWfwQu8XNVNwy7qvgMA88vHm1bZl4TgaI1n0rqAxctapJxrRgDjBDJr6LlAIYsekVg8vtGG2rLkWEYk4/c8G1693bz8z4aXoTjkTty58B+vOC9vIJwzmc8Ag5BeKXodki77U8xGzpZ8YDYv+dsvP0ZislFmtnVow00M6GW96t6euWx38HtQ+/hpX/dG4y/vox6g4fx3TMPR9mnjtE8diEbpkZvWfgBgfcJcFjtgmJFNZ9EIa9mT+acaGb2pGwCEBO43BgZrYw3JRWiCBI2Q5XfYHCHOKOlY4ua4wWQfs1sm2uAQ+aVPVc20AvuxA6u6JIrfQgo4lSbYLRcnV8EO9tDqOmnDKHxr4fQsNoOobkxhGcWOstqhk7T2g6dJYXuJkpCGNEJARJkFD5qB02xk7vxk5xZt3gB0iTfNGfBkvl3DHOuhOyqddaYY6wxpxQP7o4tuTOESYjknABjt8cOEbTkhCBNA6cZvwp8lZbgMiBPvIZdPzP90uKl4bLWbLjihfUBh650KhHCTYeJ5tiB27d2ArAHybbNRravZo+1xp1CwzCkRL82h7vOMf6ECQroRKqspwkbR0cwPZ8mv6t+uhE7soWORHryOEgdZQCV096fqavTMaW9SxTlBK+e6oUah6xY3ZaVzohEo1USVWH/1fclUdiN9KvTktiRSGwhr1UUVuCV7LZDof5BCs1zyodleVcKLfFELnZ0ZAq7B6fw/PKa+UGirDaJsroCUeaeRNmmQFT3tEQVAB8OqSOi0epWZglnIVPd13IhG2ni6ezYlsufp+T3KJmCM3zrMYrF0t5bjyZ/VXpv/cQopmLfBalfvtrXgsj0CSAE4jhTdNWgakow+lV+KdX/pySubTC8pSxuHSiLG2JuOPaSlj/MfU88DFwow0jt/QKmMBSWbxh4jDmHWg0xFdhCDRwQ9nhFFLgu66OPYRq8gWnWH6MoYZPKpmn1FWu4y8rn/y/wzpTy+2aduHdW3cY8oV7SI16n6cjfAVM0QbNZCne0kBar/yPy5tXfOsb1Hw==5Zlbc+IgFMc/jY/tBMhFH720e5lp61i3a586bEJNZpOQJbjG/fRLDOYCtlq3Nbb7ZPhDCJzzOxzADhpG2SeGE/+KeiTsQMPLOmjUgRAgC4qfXFkVSs8GhTBngScbVcJt8IdI0ZDqIvBI2mjIKQ15kDRFl8YxcXlDw4zRZbPZIw2bX03wnGjCrYtDXf0eeNwvVIiQXVV8JsHc33zatsyiJsKb1nIqqY89uqxJ6KKDhoxSXjxF2ZCEufU2hineu3yithwZIzHf54XejOIB7vu9xeyGWebXKGB3Z7KX3zhcyBlfYpdTtupAOxTdDn6wfOh8JQ1i/1rk4x080pifpWt39UUDYCbC5YOqXjzN89/h1bQ/fZhO+te34/7k4nr6cNkfTm8m99ImZceQ0UXskXysQLy39ANObhPs5rVLwZbQfB6Fsjr/vIQFmOvPrWdBGCfZk+YBpdEFroRGhOfTNLImcRLU0m3Lutul5tc8bksNS9LmZc+VL8SDdMcLXAM110wZjlM5I2iMGc1WJ2dG1N1tRwCPaUf0IexoOm3b0dLs+CVKQhKJCWEe0FjU3YFXXTbGk5uZvlDs8AVOkyIRPAZZ7r+3cI5jN50DupbunG2LRSm+undszTsjkoRUB5vEXj9PjKLkhjhNA7dpvwp8Q5RIFvCZrMmf73P93JKlUVZrNlrJwnaDE0/LtIq5xTDpgrlkd7rimM0J37V26u6rucfa4p2NxkgoiP7dHO42j8kvjGmwXkk2oaumkq7i9GKa8q16xlY7UjCDKj2FHbSO1gCV0z6cKed4TIFniRKcsNWsXqhxmBer19alEyIRtUqi0QQIwUNJtBQSneOS2NNI/FcGT48ouCdRVptE2Y593m3mPutApmxTYap3XKaAfvbRNzQ6Zye4/TBR69sPYL56hB6w8zjBqEbvIaotdcdig3MDmWYXOlbXhoZzWIQ7qN2sAfQjy7dkzrBHnmMzprEQBx5O/fL8V6M018eYc8LitQINJNSUM/qzvCKC/zvN4IkF7Eg4O03uLJW7vVMUVDpS909vDbB+qpO3FUbfi4JYw7jtWwtTiXiwWVhau7UA+iHGZQTzZ5eAF20gq3gsDzKnvYEsqGrtTKJeEBoHBqfGmroRfevg7L634FSyPGr9ShHo57qPGpx7Z85um8FpKgnPPPRwZyop2FSj/ODgFMXqP7OiefXXI7r4Cw== \ No newline at end of file