Skip to content

Commit b7139ff

Browse files
author
telome
committed
Pick tokenId offchain
1 parent 8071273 commit b7139ff

File tree

2 files changed

+17
-28
lines changed

2 files changed

+17
-28
lines changed

src/NFATFacility.sol

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,6 @@ contract NFATFacility is ERC721 {
5353

5454
mapping(uint256 tokenId => uint256 amount) public funded;
5555

56-
// --- NFAT Storage ---
57-
58-
uint256 public nextTokenId;
59-
6056
// --- Events: Access Control ---
6157

6258
event Rely(address indexed usr);
@@ -195,12 +191,11 @@ contract NFATFacility is ERC721 {
195191
/// @notice Operator issues NFAT from queue, mints to target
196192
/// @param target The Prime address to mint the NFAT to
197193
/// @param amount The amount of gem to issue
198-
function issue(address target, uint256 amount) external toll notStopped {
194+
/// @param tokenId The token ID for the new NFAT
195+
function issue(address target, uint256 amount, uint256 tokenId) external toll notStopped {
199196
require(amount > 0, "NFATFacility/zero-amount");
200197
require(deposits[target] >= amount, "NFATFacility/insufficient-deposits");
201198

202-
uint256 tokenId = nextTokenId++;
203-
204199
// Effects - Queue
205200
unchecked { deposits[target] -= amount; }
206201

test/NFATFacility.t.sol

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,8 @@ contract NFATFacilityTest is DssTest {
103103
}
104104

105105
function _issue(address target, uint256 amount) internal returns (uint256 tokenId) {
106-
tokenId = facility.nextTokenId();
107-
vm.prank(operator); facility.issue(target, amount);
106+
tokenId = vm.randomUint();
107+
vm.prank(operator); facility.issue(target, amount, tokenId);
108108
}
109109

110110
function _fundToken(uint256 tokenId, uint256 amount) internal {
@@ -191,7 +191,7 @@ contract NFATFacilityTest is DssTest {
191191
_subscribe(prime1, 100 ether);
192192

193193
// issue works before stop
194-
vm.prank(operator); facility.issue(prime1, 25 ether);
194+
vm.prank(operator); facility.issue(prime1, 25 ether, 0);
195195

196196
// stop
197197
vm.expectEmit(true, true, true, true);
@@ -201,7 +201,7 @@ contract NFATFacilityTest is DssTest {
201201

202202
// issue reverts while stopped
203203
vm.expectRevert("NFATFacility/stopped");
204-
vm.prank(operator); facility.issue(prime1, 25 ether);
204+
vm.prank(operator); facility.issue(prime1, 25 ether, 1);
205205

206206
// start
207207
vm.expectEmit(true, true, true, true);
@@ -210,7 +210,7 @@ contract NFATFacilityTest is DssTest {
210210
assertTrue(!facility.stopped());
211211

212212
// issue works again after start
213-
vm.prank(operator); facility.issue(prime1, 25 ether);
213+
vm.prank(operator); facility.issue(prime1, 25 ether, 1);
214214
}
215215

216216
// --- Queue ---
@@ -265,23 +265,17 @@ contract NFATFacilityTest is DssTest {
265265
_subscribe(prime1, 100 ether);
266266

267267
// First issue
268-
vm.expectEmit(true, true, true, true);
269-
emit Transfer(address(0), prime1, 0);
270-
vm.expectEmit(true, true, true, true);
271-
emit Issue(prime1, 0, 60 ether);
272-
uint256 tokenId = _issue(prime1, 60 ether);
268+
uint256 tokenId0 = _issue(prime1, 60 ether);
273269

274-
assertEq(tokenId, 0);
275-
assertEq(facility.ownerOf(0), prime1);
270+
assertEq(facility.ownerOf(tokenId0), prime1);
276271
assertEq(facility.balanceOf(prime1), 1);
277272
assertEq(facility.deposits(prime1), 40 ether);
278273
assertEq(susds.balanceOf(almProxy), 60 ether);
279-
assertEq(facility.nextTokenId(), 1);
280274

281275
// Second issue
282-
_issue(prime1, 30 ether);
276+
uint256 tokenId1 = _issue(prime1, 30 ether);
283277

284-
assertEq(facility.ownerOf(1), prime1);
278+
assertEq(facility.ownerOf(tokenId1), prime1);
285279
assertEq(facility.balanceOf(prime1), 2);
286280
assertEq(facility.deposits(prime1), 10 ether);
287281
}
@@ -290,32 +284,32 @@ contract NFATFacilityTest is DssTest {
290284
_subscribe(prime1, 100 ether);
291285

292286
vm.expectRevert("NFATFacility/zero-amount");
293-
vm.prank(operator); facility.issue(prime1, 0);
287+
vm.prank(operator); facility.issue(prime1, 0, 0);
294288
}
295289

296290
function testRevertIssueInsufficientDeposits() public {
297291
_subscribe(prime1, 100 ether);
298292

299293
vm.expectRevert("NFATFacility/insufficient-deposits");
300-
vm.prank(operator); facility.issue(prime1, 101 ether);
294+
vm.prank(operator); facility.issue(prime1, 101 ether, 0);
301295
}
302296

303297
function testRevertIssueStopped() public {
304298
_subscribe(prime1, 100 ether);
305299
vm.prank(pauseProxy); facility.stop();
306300

307301
vm.expectRevert("NFATFacility/stopped");
308-
vm.prank(operator); facility.issue(prime1, 50 ether);
302+
vm.prank(operator); facility.issue(prime1, 50 ether, 0);
309303
}
310304

311305
function testIssueWithIdentityNetwork() public {
312306
vm.prank(pauseProxy); facility.file("identityNetwork", address(idNet));
313307
idNet.setMember(prime1, true);
314308

315309
_subscribe(prime1, 100 ether);
316-
_issue(prime1, 50 ether);
310+
uint256 tokenId = _issue(prime1, 50 ether);
317311

318-
assertEq(facility.ownerOf(0), prime1);
312+
assertEq(facility.ownerOf(tokenId), prime1);
319313
}
320314

321315
function testRevertIssueTargetNotMember() public {
@@ -324,7 +318,7 @@ contract NFATFacilityTest is DssTest {
324318
_subscribe(prime1, 100 ether);
325319

326320
vm.expectRevert("NFATFacility/not-member");
327-
vm.prank(operator); facility.issue(prime1, 50 ether);
321+
vm.prank(operator); facility.issue(prime1, 50 ether, 0);
328322
}
329323

330324
// --- Fund ---

0 commit comments

Comments
 (0)