Skip to content

Commit

Permalink
Revert "add batch mint/burn function for bridged ERC721 tokens"
Browse files Browse the repository at this point in the history
This reverts commit 0ee4bde.
  • Loading branch information
dantaik committed May 9, 2024
1 parent 0ee4bde commit 9decea2
Show file tree
Hide file tree
Showing 14 changed files with 37 additions and 44 deletions.
2 changes: 1 addition & 1 deletion packages/protocol/contracts/L1/TaikoData.sol
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ library TaikoData {
mapping(
uint64 blockId_mod_blockRingBufferSize
=> mapping(uint32 transitionId => TransitionState ts)
) transitions;
) transitions;
// Ring buffer for Ether deposits
bytes32 __reserve1;
SlotA slotA; // slot 5
Expand Down
30 changes: 11 additions & 19 deletions packages/protocol/contracts/tokenvault/BridgedERC721.sol
Original file line number Diff line number Diff line change
Expand Up @@ -51,41 +51,33 @@ contract BridgedERC721 is EssentialContract, ERC721Upgradeable {

/// @dev Mints tokens.
/// @param _account Address to receive the minted token.
/// @param _tokenIds IDs of the tokens to mint.
function batchMint(
/// @param _tokenId ID of the token to mint.
function mint(
address _account,
uint256[] memory _tokenIds
uint256 _tokenId
)
external
whenNotPaused
onlyFromNamed(LibStrings.B_ERC721_VAULT)
nonReentrant
{
for (uint256 i; i < _tokenIds.length; ++i) {
_safeMint(_account, _tokenIds[i]);
}
_safeMint(_account, _tokenId);
}

/// @dev Burns tokens.
/// @param _tokenIds IDs of the tokens to burn.
function batchBurn(uint256[] memory _tokenIds)
/// @param _tokenId ID of the token to burn.
function burn(uint256 _tokenId)
external
whenNotPaused
onlyFromNamed(LibStrings.B_ERC721_VAULT)
nonReentrant
{
for (uint256 i; i < _tokenIds.length; ++i) {
// Check if the caller is the owner of the token. Somehow this is not done inside the
// _burn() function below.
if (ownerOf(_tokenIds[i]) != msg.sender) revert BTOKEN_INVALID_BURN();
_burn(_tokenIds[i]);
}
}

function safeBatchTransferFrom(address _from, address _to, uint256[] memory _tokenIds) public {
for (uint256 i; i < _tokenIds.length; ++i) {
safeTransferFrom(_from, _to, _tokenIds[i], "");
// Check if the caller is the owner of the token. Somehow this is not done inside the
// _burn() function below.
if (ownerOf(_tokenId) != msg.sender) {
revert BTOKEN_INVALID_BURN();
}
_burn(_tokenId);
}

/// @notice Gets the source token and source chain ID being bridged.
Expand Down
14 changes: 9 additions & 5 deletions packages/protocol/contracts/tokenvault/ERC721Vault.sol
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,9 @@ contract ERC721Vault is BaseNFTVault, IERC721Receiver {
}
} else {
token_ = _getOrDeployBridgedToken(_ctoken);
BridgedERC721(token_).batchMint(_to, _tokenIds);
for (uint256 i; i < _tokenIds.length; ++i) {
BridgedERC721(token_).mint(_to, _tokenIds[i]);
}
}
}

Expand All @@ -194,10 +196,12 @@ contract ERC721Vault is BaseNFTVault, IERC721Receiver {
CanonicalNFT storage _ctoken = bridgedToCanonical[_op.token];
if (_ctoken.addr != address(0)) {
ctoken_ = _ctoken;
BridgedERC721(_op.token).safeBatchTransferFrom(
msg.sender, address(this), _op.tokenIds
);
BridgedERC721(_op.token).batchBurn(_op.tokenIds);
for (uint256 i; i < _op.tokenIds.length; ++i) {
BridgedERC721(_op.token).safeTransferFrom(
msg.sender, address(this), _op.tokenIds[i]
);
BridgedERC721(_op.token).burn(_op.tokenIds[i]);
}
} else {
ctoken_ = CanonicalNFT({
chainId: uint64(block.chainid),
Expand Down
2 changes: 1 addition & 1 deletion packages/protocol/script/DeployERC20Airdrop.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ contract DeployERC20Airdrop is DeployCapability {
impl: address(new ERC20Airdrop()),
data: abi.encodeCall(
ERC20Airdrop.init, (address(0), 0, 0, bytes32(0), bridgedTko, vaultAddress)
)
)
})
);

Expand Down
6 changes: 3 additions & 3 deletions packages/protocol/script/DeployOnL1.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ contract DeployOnL1 is DeployCapability {
impl: address(new TaikoToken()),
data: abi.encodeCall(
TaikoToken.init, (owner, vm.envAddress("TAIKO_TOKEN_PREMINT_RECIPIENT"))
),
),
registerTo: sharedAddressManager
});
}
Expand Down Expand Up @@ -263,7 +263,7 @@ contract DeployOnL1 is DeployCapability {
vm.envBytes32("L2_GENESIS_HASH"),
vm.envBool("PAUSE_TAIKO_L1")
)
),
),
registerTo: rollupAddressManager
});

Expand Down Expand Up @@ -330,7 +330,7 @@ contract DeployOnL1 is DeployCapability {
impl: automateDcapV3AttestationImpl,
data: abi.encodeCall(
AutomataDcapV3Attestation.init, (owner, address(sigVerifyLib), address(pemCertChainLib))
),
),
registerTo: rollupAddressManager
});

Expand Down
2 changes: 1 addition & 1 deletion packages/protocol/test/L2/TaikoL2.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ contract TestTaikoL2 is TaikoTest {
impl: address(new TaikoL2EIP1559Configurable()),
data: abi.encodeCall(
TaikoL2.init, (address(0), addressManager, l1ChainId, gasExcess)
),
),
registerTo: addressManager
})
)
Expand Down
2 changes: 1 addition & 1 deletion packages/protocol/test/L2/TaikoL2NoFeeCheck.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ contract TestTaikoL2NoFeeCheck is TaikoTest {
impl: address(new SkipBasefeeCheckL2()),
data: abi.encodeCall(
TaikoL2.init, (address(0), addressManager, l1ChainId, gasExcess)
),
),
registerTo: addressManager
})
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ contract AttestationBase is Test, DcapTestUtils, V3QuoteParseUtils {
data: abi.encodeCall(
AutomataDcapV3Attestation.init,
(admin, address(sigVerifyLib), address(pemCertChainLib))
)
)
})
);

Expand Down
2 changes: 1 addition & 1 deletion packages/protocol/test/bridge/Bridge.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ contract BridgeTest is TaikoTest {
impl: address(new DelegateOwner()),
data: abi.encodeCall(
DelegateOwner.init, (mockDAO, address(addressManager), l1ChainId)
)
)
})
)
);
Expand Down
4 changes: 2 additions & 2 deletions packages/protocol/test/team/airdrop/ERC20Airdrop.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ contract TestERC20Airdrop is TaikoTest {
data: abi.encodeCall(
BridgedERC20.init,
(address(0), address(addressManager), randAddress(), 100, 18, "TKO", "Taiko Token")
)
)
})
);

Expand All @@ -129,7 +129,7 @@ contract TestERC20Airdrop is TaikoTest {
data: abi.encodeCall(
ERC20Airdrop.init,
(address(0), claimStart, claimEnd, merkleRoot, address(token), address(vault))
)
)
})
);

Expand Down
2 changes: 1 addition & 1 deletion packages/protocol/test/tokenvault/BridgedERC20.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ contract TestBridgedERC20 is TaikoTest {
data: abi.encodeCall(
BridgedERC20.init,
(owner, address(manager), srcToken, srcChainId, srcDecimals, name, name)
),
),
registerTo: manager
})
);
Expand Down
6 changes: 3 additions & 3 deletions packages/protocol/test/tokenvault/ERC20Vault.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ contract TestERC20Vault is TaikoTest {
data: abi.encodeCall(
BridgedERC20.init,
(address(0), address(addressManager), randAddress(), 100, 18, "USDC", "USDC coin")
)
)
})
);

Expand All @@ -188,7 +188,7 @@ contract TestERC20Vault is TaikoTest {
data: abi.encodeCall(
BridgedERC20.init,
(address(0), address(addressManager), randAddress(), 100, 18, "USDT", "USDT coin")
)
)
})
);

Expand All @@ -207,7 +207,7 @@ contract TestERC20Vault is TaikoTest {
"stETH",
"Lido Staked ETH"
)
)
)
})
);
vm.stopPrank();
Expand Down
5 changes: 1 addition & 4 deletions packages/protocol/test/tokenvault/ERC721Vault.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -907,10 +907,7 @@ contract ERC721VaultTest is TaikoTest {
// Also Vault cannot burn tokens it does not own (even if the priv key compromised)
vm.prank(address(destChainErc721Vault), address(destChainErc721Vault));
vm.expectRevert(BridgedERC721.BTOKEN_INVALID_BURN.selector);

tokenIds = new uint256[](1);
tokenIds[0] = 1;
BridgedERC721(deployedContract).batchBurn(tokenIds);
BridgedERC721(deployedContract).burn(1);

// After approve() ERC721Vault can transfer and burn
vm.prank(Alice, Alice);
Expand Down
2 changes: 1 addition & 1 deletion packages/protocol/test/verifiers/RiscZeroVerifier.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ contract TestRiscZeroVerifier is TaikoL1TestBase {
data: abi.encodeCall(
RiscZeroVerifier.init,
(address(0), address(addressManager), address(riscZeroRemoteVerifier))
)
)
})
);

Expand Down

0 comments on commit 9decea2

Please sign in to comment.