Skip to content

Commit f6fb806

Browse files
committed
Add ERC-2771 support
1 parent 272c97e commit f6fb806

29 files changed

Lines changed: 590 additions & 1137 deletions

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
Please follow https://changelog.md/ conventions.
44

5+
## v0.2.0
6+
7+
- Add ERC-2771 support
8+
59
## v0.1.0
610

711
- 🎉 first release!

README.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,18 @@ interface IDebtEngine is IDebtGlobal {
8787
| 🛑 | Function can modify state |
8888
| 💵 | Function is payable |
8989

90+
91+
92+
## Gasless support (ERC-2771)
93+
94+
The DebtEngine 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).
95+
96+
At deployment, the parameter `forwarder` inside the constructor has to be set with the defined address of the forwarder. Please note that the forwarder can not be changed after deployment.
97+
98+
Please see the OpenGSN [documentation](https://docs.opengsn.org/contracts/#receiving-a-relayed-call) for more details on what is done to support GSN in the contract.
99+
100+
101+
90102
## Dependencies
91103

92104
The toolchain includes the following components, where the versions are the latest ones that we tested:

doc/coverage/coverage/index-sort-b.html

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,18 @@
3131
<td class="headerValue">lcov.info</td>
3232
<td></td>
3333
<td class="headerItem">Lines:</td>
34-
<td class="headerCovTableEntry">19</td>
35-
<td class="headerCovTableEntry">20</td>
36-
<td class="headerCovTableEntryHi">95.0 %</td>
34+
<td class="headerCovTableEntry">21</td>
35+
<td class="headerCovTableEntry">22</td>
36+
<td class="headerCovTableEntryHi">95.5 %</td>
3737
</tr>
3838
<tr>
3939
<td class="headerItem">Date:</td>
40-
<td class="headerValue">2024-09-03 10:05:10</td>
40+
<td class="headerValue">2024-09-09 14:59:40</td>
4141
<td></td>
4242
<td class="headerItem">Functions:</td>
43-
<td class="headerCovTableEntry">6</td>
44-
<td class="headerCovTableEntry">9</td>
45-
<td class="headerCovTableEntryLo">66.7 %</td>
43+
<td class="headerCovTableEntry">8</td>
44+
<td class="headerCovTableEntry">10</td>
45+
<td class="headerCovTableEntryMed">80.0 %</td>
4646
</tr>
4747
<tr>
4848
<td></td>
@@ -81,27 +81,15 @@
8181
<td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td>
8282
<td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><img src="glass.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></span></td>
8383
</tr>
84-
<tr>
85-
<td class="coverFile"><a href="script/index.html">script</a></td>
86-
<td class="coverBar" align="center">
87-
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
88-
</td>
89-
<td class="coverPerLo">0.0&nbsp;%</td>
90-
<td class="coverNumLo">0 / 1</td>
91-
<td class="coverPerLo">0.0&nbsp;%</td>
92-
<td class="coverNumLo">0 / 2</td>
93-
<td class="coverPerHi">-</td>
94-
<td class="coverNumHi">0 / 0</td>
95-
</tr>
9684
<tr>
9785
<td class="coverFile"><a href="src/index.html">src</a></td>
9886
<td class="coverBar" align="center">
99-
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
87+
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=95 height=10 alt="95.5%"><img src="snow.png" width=5 height=10 alt="95.5%"></td></tr></table>
10088
</td>
101-
<td class="coverPerHi">100.0&nbsp;%</td>
102-
<td class="coverNumHi">19 / 19</td>
103-
<td class="coverPerMed">85.7&nbsp;%</td>
104-
<td class="coverNumMed">6 / 7</td>
89+
<td class="coverPerHi">95.5&nbsp;%</td>
90+
<td class="coverNumHi">21 / 22</td>
91+
<td class="coverPerMed">80.0&nbsp;%</td>
92+
<td class="coverNumMed">8 / 10</td>
10593
<td class="coverPerHi">100.0&nbsp;%</td>
10694
<td class="coverNumHi">6 / 6</td>
10795
</tr>

doc/coverage/coverage/index-sort-f.html

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,18 @@
3131
<td class="headerValue">lcov.info</td>
3232
<td></td>
3333
<td class="headerItem">Lines:</td>
34-
<td class="headerCovTableEntry">19</td>
35-
<td class="headerCovTableEntry">20</td>
36-
<td class="headerCovTableEntryHi">95.0 %</td>
34+
<td class="headerCovTableEntry">21</td>
35+
<td class="headerCovTableEntry">22</td>
36+
<td class="headerCovTableEntryHi">95.5 %</td>
3737
</tr>
3838
<tr>
3939
<td class="headerItem">Date:</td>
40-
<td class="headerValue">2024-09-03 10:05:10</td>
40+
<td class="headerValue">2024-09-09 14:59:40</td>
4141
<td></td>
4242
<td class="headerItem">Functions:</td>
43-
<td class="headerCovTableEntry">6</td>
44-
<td class="headerCovTableEntry">9</td>
45-
<td class="headerCovTableEntryLo">66.7 %</td>
43+
<td class="headerCovTableEntry">8</td>
44+
<td class="headerCovTableEntry">10</td>
45+
<td class="headerCovTableEntryMed">80.0 %</td>
4646
</tr>
4747
<tr>
4848
<td></td>
@@ -81,27 +81,15 @@
8181
<td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><img src="glass.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></span></td>
8282
<td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td>
8383
</tr>
84-
<tr>
85-
<td class="coverFile"><a href="script/index.html">script</a></td>
86-
<td class="coverBar" align="center">
87-
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
88-
</td>
89-
<td class="coverPerLo">0.0&nbsp;%</td>
90-
<td class="coverNumLo">0 / 1</td>
91-
<td class="coverPerLo">0.0&nbsp;%</td>
92-
<td class="coverNumLo">0 / 2</td>
93-
<td class="coverPerHi">-</td>
94-
<td class="coverNumHi">0 / 0</td>
95-
</tr>
9684
<tr>
9785
<td class="coverFile"><a href="src/index.html">src</a></td>
9886
<td class="coverBar" align="center">
99-
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
87+
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=95 height=10 alt="95.5%"><img src="snow.png" width=5 height=10 alt="95.5%"></td></tr></table>
10088
</td>
101-
<td class="coverPerHi">100.0&nbsp;%</td>
102-
<td class="coverNumHi">19 / 19</td>
103-
<td class="coverPerMed">85.7&nbsp;%</td>
104-
<td class="coverNumMed">6 / 7</td>
89+
<td class="coverPerHi">95.5&nbsp;%</td>
90+
<td class="coverNumHi">21 / 22</td>
91+
<td class="coverPerMed">80.0&nbsp;%</td>
92+
<td class="coverNumMed">8 / 10</td>
10593
<td class="coverPerHi">100.0&nbsp;%</td>
10694
<td class="coverNumHi">6 / 6</td>
10795
</tr>

doc/coverage/coverage/index-sort-l.html

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,18 @@
3131
<td class="headerValue">lcov.info</td>
3232
<td></td>
3333
<td class="headerItem">Lines:</td>
34-
<td class="headerCovTableEntry">19</td>
35-
<td class="headerCovTableEntry">20</td>
36-
<td class="headerCovTableEntryHi">95.0 %</td>
34+
<td class="headerCovTableEntry">21</td>
35+
<td class="headerCovTableEntry">22</td>
36+
<td class="headerCovTableEntryHi">95.5 %</td>
3737
</tr>
3838
<tr>
3939
<td class="headerItem">Date:</td>
40-
<td class="headerValue">2024-09-03 10:05:10</td>
40+
<td class="headerValue">2024-09-09 14:59:40</td>
4141
<td></td>
4242
<td class="headerItem">Functions:</td>
43-
<td class="headerCovTableEntry">6</td>
44-
<td class="headerCovTableEntry">9</td>
45-
<td class="headerCovTableEntryLo">66.7 %</td>
43+
<td class="headerCovTableEntry">8</td>
44+
<td class="headerCovTableEntry">10</td>
45+
<td class="headerCovTableEntryMed">80.0 %</td>
4646
</tr>
4747
<tr>
4848
<td></td>
@@ -81,27 +81,15 @@
8181
<td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td>
8282
<td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td>
8383
</tr>
84-
<tr>
85-
<td class="coverFile"><a href="script/index.html">script</a></td>
86-
<td class="coverBar" align="center">
87-
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
88-
</td>
89-
<td class="coverPerLo">0.0&nbsp;%</td>
90-
<td class="coverNumLo">0 / 1</td>
91-
<td class="coverPerLo">0.0&nbsp;%</td>
92-
<td class="coverNumLo">0 / 2</td>
93-
<td class="coverPerHi">-</td>
94-
<td class="coverNumHi">0 / 0</td>
95-
</tr>
9684
<tr>
9785
<td class="coverFile"><a href="src/index.html">src</a></td>
9886
<td class="coverBar" align="center">
99-
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
87+
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=95 height=10 alt="95.5%"><img src="snow.png" width=5 height=10 alt="95.5%"></td></tr></table>
10088
</td>
101-
<td class="coverPerHi">100.0&nbsp;%</td>
102-
<td class="coverNumHi">19 / 19</td>
103-
<td class="coverPerMed">85.7&nbsp;%</td>
104-
<td class="coverNumMed">6 / 7</td>
89+
<td class="coverPerHi">95.5&nbsp;%</td>
90+
<td class="coverNumHi">21 / 22</td>
91+
<td class="coverPerMed">80.0&nbsp;%</td>
92+
<td class="coverNumMed">8 / 10</td>
10593
<td class="coverPerHi">100.0&nbsp;%</td>
10694
<td class="coverNumHi">6 / 6</td>
10795
</tr>

doc/coverage/coverage/index.html

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,18 @@
3131
<td class="headerValue">lcov.info</td>
3232
<td></td>
3333
<td class="headerItem">Lines:</td>
34-
<td class="headerCovTableEntry">19</td>
35-
<td class="headerCovTableEntry">20</td>
36-
<td class="headerCovTableEntryHi">95.0 %</td>
34+
<td class="headerCovTableEntry">21</td>
35+
<td class="headerCovTableEntry">22</td>
36+
<td class="headerCovTableEntryHi">95.5 %</td>
3737
</tr>
3838
<tr>
3939
<td class="headerItem">Date:</td>
40-
<td class="headerValue">2024-09-03 10:05:10</td>
40+
<td class="headerValue">2024-09-09 14:59:40</td>
4141
<td></td>
4242
<td class="headerItem">Functions:</td>
43-
<td class="headerCovTableEntry">6</td>
44-
<td class="headerCovTableEntry">9</td>
45-
<td class="headerCovTableEntryLo">66.7 %</td>
43+
<td class="headerCovTableEntry">8</td>
44+
<td class="headerCovTableEntry">10</td>
45+
<td class="headerCovTableEntryMed">80.0 %</td>
4646
</tr>
4747
<tr>
4848
<td></td>
@@ -81,27 +81,15 @@
8181
<td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td>
8282
<td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td>
8383
</tr>
84-
<tr>
85-
<td class="coverFile"><a href="script/index.html">script</a></td>
86-
<td class="coverBar" align="center">
87-
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
88-
</td>
89-
<td class="coverPerLo">0.0&nbsp;%</td>
90-
<td class="coverNumLo">0 / 1</td>
91-
<td class="coverPerLo">0.0&nbsp;%</td>
92-
<td class="coverNumLo">0 / 2</td>
93-
<td class="coverPerHi">-</td>
94-
<td class="coverNumHi">0 / 0</td>
95-
</tr>
9684
<tr>
9785
<td class="coverFile"><a href="src/index.html">src</a></td>
9886
<td class="coverBar" align="center">
99-
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
87+
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=95 height=10 alt="95.5%"><img src="snow.png" width=5 height=10 alt="95.5%"></td></tr></table>
10088
</td>
101-
<td class="coverPerHi">100.0&nbsp;%</td>
102-
<td class="coverNumHi">19 / 19</td>
103-
<td class="coverPerMed">85.7&nbsp;%</td>
104-
<td class="coverNumMed">6 / 7</td>
89+
<td class="coverPerHi">95.5&nbsp;%</td>
90+
<td class="coverNumHi">21 / 22</td>
91+
<td class="coverPerMed">80.0&nbsp;%</td>
92+
<td class="coverNumMed">8 / 10</td>
10593
<td class="coverPerHi">100.0&nbsp;%</td>
10694
<td class="coverNumHi">6 / 6</td>
10795
</tr>

doc/coverage/coverage/script/Counter.s.sol.func-sort-c.html

Lines changed: 0 additions & 89 deletions
This file was deleted.

0 commit comments

Comments
 (0)