Skip to content

Commit

Permalink
Merge pull request #43 from bitmark-inc/mergeable_contract
Browse files Browse the repository at this point in the history
implement mergeable contract
  • Loading branch information
jollyjoker992 authored Jul 5, 2024
2 parents 02ab0ad + 3d39f84 commit b2b7b49
Show file tree
Hide file tree
Showing 8 changed files with 4,335 additions and 8 deletions.
5 changes: 5 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ merge: sol-merger-check
sol-merger --export-plugin SPDXLicenseRemovePlugin ./contracts/FeralfileArtworkV3.sol /tmp/sol-merger && \
sol-merger --export-plugin SPDXLicenseRemovePlugin ./contracts/FeralfileArtworkV4_1.sol /tmp/sol-merger && \
sol-merger --export-plugin SPDXLicenseRemovePlugin ./contracts/FeralfileArtworkV4_2.sol /tmp/sol-merger && \
sol-merger --export-plugin SPDXLicenseRemovePlugin ./contracts/FeralfileArtworkV4_3.sol /tmp/sol-merger && \
sol-merger --export-plugin SPDXLicenseRemovePlugin ./contracts/FeralfileEnglishAuction.sol /tmp/sol-merger && \
sol-merger --export-plugin SPDXLicenseRemovePlugin ./contracts/FeralFileAirdropV1.sol /tmp/sol-merger && \
sol-merger --export-plugin SPDXLicenseRemovePlugin ./contracts/OwnerData.sol /tmp/sol-merger && \
Expand All @@ -45,6 +46,8 @@ build-contract: check
jq -r ".abi" build/contracts/FeralfileExhibitionV4_1.json > ./build/FeralfileExhibitionV4.abi && \
jq -r ".bytecode" build/contracts/FeralfileExhibitionV4_2.json > ./build/FeralfileExhibitionV4_2.bin && \
jq -r ".abi" build/contracts/FeralfileExhibitionV4_2.json > ./build/FeralfileExhibitionV4_2.abi && \
jq -r ".bytecode" build/contracts/FeralfileExhibitionV4_3.json > ./build/FeralfileExhibitionV4_3.bin && \
jq -r ".abi" build/contracts/FeralfileExhibitionV4_3.json > ./build/FeralfileExhibitionV4_3.abi && \
jq -r ".bytecode" build/contracts/FeralfileEnglishAuction.json > ./build/FeralfileEnglishAuction.bin && \
jq -r ".abi" build/contracts/FeralfileEnglishAuction.json > ./build/FeralfileEnglishAuction.abi && \
jq -r ".bytecode" build/contracts/FeralFileAirdropV1.json > ./build/FeralFileAirdropV1.bin && \
Expand All @@ -57,13 +60,15 @@ build: build-contract
mkdir -p ./go-binding/feralfile-exhibition-v3 && \
mkdir -p ./go-binding/feralfile-exhibition-v4 && \
mkdir -p ./go-binding/feralfile-exhibition-v4_2 && \
mkdir -p ./go-binding/feralfile-exhibition-v4_3 && \
mkdir -p ./go-binding/feralfile-english-auction && \
mkdir -p ./go-binding/feralfile-airdrop-v1 && \
mkdir -p ./go-binding/owner-data && \
abigen --abi ./build/FeralfileExhibitionV2.abi --bin ./build/FeralfileExhibitionV2.bin --pkg feralfilev2 -type FeralfileExhibitionV2 --out ./go-binding/feralfile-exhibition-v2/abi.go
abigen --abi ./build/FeralfileExhibitionV3.abi --bin ./build/FeralfileExhibitionV3.bin --pkg feralfilev3 -type FeralfileExhibitionV3 --out ./go-binding/feralfile-exhibition-v3/abi.go
abigen --abi ./build/FeralfileExhibitionV4.abi --bin ./build/FeralfileExhibitionV4.bin --pkg feralfilev4 -type FeralfileExhibitionV4 --out ./go-binding/feralfile-exhibition-v4/abi.go
abigen --abi ./build/FeralfileExhibitionV4_2.abi --bin ./build/FeralfileExhibitionV4_2.bin --pkg feralfilev4_2 -type FeralfileExhibitionV4_2 --out ./go-binding/feralfile-exhibition-v4_2/abi.go
abigen --abi ./build/FeralfileExhibitionV4_3.abi --bin ./build/FeralfileExhibitionV4_3.bin --pkg feralfilev4_2 -type FeralfileExhibitionV4_3 --out ./go-binding/feralfile-exhibition-v4_3/abi.go
abigen --abi ./build/FeralfileEnglishAuction.abi --bin ./build/FeralfileEnglishAuction.bin --pkg english_auction -type FeralfileEnglishAuction --out ./go-binding/feralfile-english-auction/abi.go
abigen --abi ./build/FeralFileAirdropV1.abi --bin ./build/FeralFileAirdropV1.bin --pkg airdropv1 -type FeralFileAirdropV1 --out ./go-binding/feralfile-airdrop-v1/abi.go && \
abigen --abi ./build/OwnerData.abi --bin ./build/OwnerData.bin --pkg ownerdata -type OwnerData --out ./go-binding/owner-data/abi.go
11 changes: 5 additions & 6 deletions contracts/FeralfileArtworkV4.sol
Original file line number Diff line number Diff line change
Expand Up @@ -130,12 +130,11 @@ contract FeralfileExhibitionV4 is

// initialize max supply map
for (uint256 i = 0; i < seriesIds_.length; i++) {
// Check duplicate with others
for (uint256 j = i + 1; j < seriesIds_.length; j++) {
if (seriesIds_[i] == seriesIds_[j]) {
revert("FeralfileExhibitionV4: duplicate seriesId");
}
}
require(
_seriesMaxSupplies[seriesIds_[i]] == 0,
"FeralfileExhibitionV4: duplicate seriesId"
);

require(
seriesMaxSupplies_[i] > 0,
"FeralfileExhibitionV4: zero max supply"
Expand Down
91 changes: 91 additions & 0 deletions contracts/FeralfileArtworkV4_3.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

import {FeralfileExhibitionV4_1} from "./FeralfileArtworkV4_1.sol";

contract FeralfileExhibitionV4_3 is FeralfileExhibitionV4_1 {
error InvalidOwner();
error TokenIsNonMergeable();
error InvalidLength();

struct MergeArtworkInfo {
uint256 singleSeriesId;
uint256 mergedSeriesId;
uint256 nextTokenId;
}
MergeArtworkInfo private mergeArtworkInfo;

constructor(
string memory name_,
string memory symbol_,
bool burnable_,
bool bridgeable_,
address signer_,
address vault_,
address costReceiver_,
string memory contractURI_,
uint256[] memory seriesIds_,
uint256[] memory seriesMaxSupplies_,
MergeArtworkInfo memory mergeArtworkInfo_
)
FeralfileExhibitionV4_1(
name_,
symbol_,
burnable_,
bridgeable_,
signer_,
vault_,
costReceiver_,
contractURI_,
seriesIds_,
seriesMaxSupplies_
)
{
mergeArtworkInfo = mergeArtworkInfo_;
}

/// @notice burns multiples mergeable artworks and mint a new artworks
/// @param tokenIds - list of tokenIds to be burned
function mergeArtworks(uint256[] calldata tokenIds) external {
if (tokenIds.length < 2) {
revert InvalidLength();
}

// Burn artworks
for (uint256 i = 0; i < tokenIds.length; i++) {
uint256 tokenId = tokenIds[i];
Artwork memory artwork = _allArtworks[tokenId];

if (
artwork.seriesId != mergeArtworkInfo.singleSeriesId &&
artwork.seriesId != mergeArtworkInfo.mergedSeriesId
) {
revert TokenIsNonMergeable();
}

if (ownerOf(tokenId) != _msgSender()) {
revert InvalidOwner();
}

_burnArtwork(tokenId);
}

// Mint new artwork
uint256 newTokenId = mergeArtworkInfo.nextTokenId;
_mintArtwork(
mergeArtworkInfo.mergedSeriesId,
newTokenId,
_msgSender()
);
mergeArtworkInfo.nextTokenId++;

emit MergedArtwork(_msgSender(), tokenIds, newTokenId);
}

/// @notice Event emitted when a merged artwork has been minted
event MergedArtwork(
address indexed owner,
uint256[] mergingTokenIds,
uint256 indexed newTokenId
);
}
2 changes: 1 addition & 1 deletion go-binding/feralfile-exhibition-v4/abi.go

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion go-binding/feralfile-exhibition-v4_2/abi.go

Large diffs are not rendered by default.

2,900 changes: 2,900 additions & 0 deletions go-binding/feralfile-exhibition-v4_3/abi.go

Large diffs are not rendered by default.

48 changes: 48 additions & 0 deletions migrations/322_feralfile_exhibition_v4_3.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
var FeralfileExhibitionV4_3 = artifacts.require("FeralfileExhibitionV4_3");

const argv = require("minimist")(process.argv.slice(2), {
string: [
"exhibition_signer",
"exhibition_vault",
"exhibition_cost_receiver",
],
});

module.exports = function (deployer) {
let exhibition_name = argv.exhibition_name || "CRAWL";
let exhibition_symbol = argv.exhibition_symbol || "FERALFILE";
let exhibition_signer =
argv.exhibition_signer || "0xBEb9F810862c40A144925f568b1853d72Acc492F";
let exhibition_vault =
argv.exhibition_vault || "0x0c51e8becb17ba3203cd04d3fc31fcb90de412a1";
let exhibition_cost_receiver =
argv.exhibition_cost_receiver ||
"0x6732389c6d47d01487dcDc96e2Cc6BAf108452f2";
let burnable = argv.burnable || true;
let bridgeable = argv.bridgeable || true;
let contract_uri =
argv.contract_uri ||
"ipfs://QmZuygbgeVDZ8NBBpD3oSVUAibTTgKYnKvYWikdGp7HwNb";
let series_ids = argv.series_ids || [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
let max_supplies = argv.max_supplies || [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 512, 511];
let merge_artwork_info = argv.merge_artwork_info || {
singleSeriesId: 11,
mergedSeriesId: 12,
nextTokenId: "65139289060393321767190134082157117717885840752315574009980337524583053413184"
};

deployer.deploy(
FeralfileExhibitionV4_3,
exhibition_name,
exhibition_symbol,
burnable,
bridgeable,
exhibition_signer,
exhibition_vault,
exhibition_cost_receiver,
contract_uri,
series_ids,
max_supplies,
merge_artwork_info
);
};
Loading

0 comments on commit b2b7b49

Please sign in to comment.