Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Billboard #120

Merged
merged 55 commits into from
Dec 19, 2023
Merged
Show file tree
Hide file tree
Changes from 41 commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
1d3e54b
Create the first version of Billboard contracts.
zeckli Oct 31, 2023
38780e5
Fix typos.
zeckli Nov 3, 2023
37baf4a
Add test cases for Billboard.
zeckli Nov 3, 2023
29971b5
Add test cases realted to board settings.
zeckli Nov 3, 2023
e555872
Add test cases realted to board settings.
zeckli Nov 3, 2023
1981fed
Add test cases realted to board settings.
zeckli Nov 3, 2023
4d88474
Change method setBoardRedirectLink to setBoardRedirectURI.
zeckli Nov 7, 2023
ce5b45a
Remove unnecessary address(0) checker since transaction will be failed.
zeckli Nov 7, 2023
ec152ec
Add basic assert for auction and registry upgradability.
zeckli Nov 7, 2023
7841bbe
Rename Board property owner to creator.
zeckli Nov 7, 2023
5e989e9
Remove unnecessary address validator from modifiers.
zeckli Nov 7, 2023
7c28cf2
Add more test cases for transferring and minting.
zeckli Nov 7, 2023
fb23fb4
Add white list for basic access control.
zeckli Nov 7, 2023
6428a16
feat(billboard): revise interface
robertu7 Nov 11, 2023
b19e8b6
feat(billboard): impls of BillboardRegistry
robertu7 Nov 12, 2023
490cbd1
feat(billboard): impls getters and basic setters
robertu7 Nov 12, 2023
98f620d
feat(billboard): add lease to Auction
robertu7 Nov 12, 2023
ad3886e
feat(billboard): impl clearAuction
robertu7 Nov 12, 2023
21b5b2e
feat(billboard): impl placeBid
robertu7 Nov 12, 2023
a098934
feat(billboard): move `bidders` and `bids` out of `Auction` struct
robertu7 Nov 14, 2023
842ebe8
fix(billboard): fix formatter
robertu7 Nov 14, 2023
15e69a7
fix(billboard): fix getters & setters
robertu7 Nov 14, 2023
43f6f5b
fix(billboard): fix interface
robertu7 Nov 14, 2023
e7c3304
fix(billboard): fix interfaces
robertu7 Nov 15, 2023
d282702
feat(billboard): revise deployment & tests
robertu7 Nov 15, 2023
32f96d5
feat(billboard): add tests for mintBoard
robertu7 Nov 15, 2023
d7c1b89
feat(billboard): add tests for board properties
robertu7 Nov 15, 2023
da0d73f
feat(billboard): add tests for ownership
robertu7 Nov 15, 2023
2c1660e
fix(billboard): add missing transfer and highestBidder logic of `plac…
robertu7 Nov 16, 2023
cf25116
fix(billboard): remove unused Board.auctionId
robertu7 Nov 16, 2023
43f0e46
feat(billboard): add tests for placeBid
robertu7 Nov 16, 2023
7c22426
feat(billboard): add more tests for placeBid
robertu7 Nov 16, 2023
4fda8b6
feat(billboard): add tests for clearAuction
robertu7 Nov 17, 2023
882b9ba
feat(billboard): add fuzz tests
robertu7 Nov 17, 2023
14fa055
feat(billboard): add more tests for withdraw
robertu7 Nov 17, 2023
f9a4aa3
feat: add test for getBids
robertu7 Nov 19, 2023
ea58ea7
feat(billboard): impl events and tests
robertu7 Nov 20, 2023
827b837
feat(billboard): add tests for ERC721.Approval and Transfer events
robertu7 Nov 20, 2023
6e68e00
feat(billboard): add tests for ERC721 name & symbol
robertu7 Nov 20, 2023
d0454af
feat(billboard): add scripts for static analyzers and billboard deplo…
robertu7 Nov 20, 2023
10ae7eb
feat(billboard): deploy to mumbai
robertu7 Nov 20, 2023
001e7b2
feat(ci): add gas diff
robertu7 Nov 21, 2023
10389c7
fix(ci): run tests
robertu7 Nov 21, 2023
903742f
feat(billboard): pack Auction timestamps to uint64 for gas optimzation
robertu7 Nov 21, 2023
cf88105
feat(billboard): make lastTokenId public
robertu7 Nov 22, 2023
4d13fcb
feat(billboard): add clearAuctions
robertu7 Nov 22, 2023
58ff978
feat(billboard): refund overpaid on placeBid
robertu7 Nov 22, 2023
7e28b4b
feat(ci): run test with gas report
robertu7 Nov 22, 2023
ff9409a
feat(billboard): use "require" instead of custom errors
robertu7 Nov 23, 2023
e2975f1
feat(billboard): skip if auction is already cleared
robertu7 Nov 23, 2023
a346b1f
feat(billboard): remove unused TaxTreasury.owner
robertu7 Nov 24, 2023
292835a
feat(billboard): use getBoard instead of destructing
robertu7 Nov 24, 2023
363c16b
feat(billboard): mtigate securiry risks
robertu7 Nov 24, 2023
4f4c923
feat(billboard): change leaseTerm from block.timestamp to block.number
robertu7 Dec 5, 2023
89efae2
feat(billboard): set default tax rate to 7%
robertu7 Dec 6, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .env.local.example
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,5 @@ THESPACE_TEAM_TOKENS=
THESPACE_INCENTIVES_ADDRESS=
THESPACE_INCENTIVES_TOKENS=
THESPACE_LP_ADDRESS=
THESPACE_LP_TOKENS=
THESPACE_LP_TOKENS=
BILLBOARD_REGISTRY_ADDRESS=0x0000000000000000000000000000000000000000
1 change: 1 addition & 0 deletions .env.polygon-mainnet.example
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,4 @@ THESPACE_INCENTIVES_ADDRESS=
THESPACE_INCENTIVES_TOKENS=
THESPACE_LP_ADDRESS=
THESPACE_LP_TOKENS=
BILLBOARD_REGISTRY_ADDRESS=0x0000000000000000000000000000000000000000
3 changes: 2 additions & 1 deletion .env.polygon-mumbai.example
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,5 @@ THESPACE_TEAM_TOKENS=
THESPACE_INCENTIVES_ADDRESS=
THESPACE_INCENTIVES_TOKENS=
THESPACE_LP_ADDRESS=
THESPACE_LP_TOKENS=
THESPACE_LP_TOKENS=
BILLBOARD_REGISTRY_ADDRESS=0x0000000000000000000000000000000000000000
259 changes: 153 additions & 106 deletions .gas-snapshot
Original file line number Diff line number Diff line change
@@ -1,113 +1,160 @@
CurationTest:testCannotCurateERC20CurateZeroAmount() (gas: 12244)
CurationTest:testCannotCurateERC20EmptyURI() (gas: 15838)
CurationTest:testCannotCurateERC20IfNotApproval() (gas: 21671)
CurationTest:testCannotCurateERC20SelfCuration() (gas: 16082)
CurationTest:testCannotCurateERC20ZeroAddress() (gas: 15950)
CurationTest:testCannotCurateNativeTokenCurateZeroAmount() (gas: 10008)
CurationTest:testCannotCurateNativeTokenEmptyURI() (gas: 16508)
CurationTest:testCannotCurateNativeTokenSelfCuration() (gas: 16763)
CurationTest:testCannotCurateNativeTokenToContractRejector() (gas: 28604)
CurationTest:testCannotCurateNativeTokenZeroAddress() (gas: 16528)
CurationTest:testERC20Curation() (gas: 59976)
CurationTest:testNativeTokenCuration() (gas: 60127)
CurationTest:testNativeTokenCurationToContractAcceptor() (gas: 37508)
LogbookTest:testClaim() (gas: 134763)
LogbookTest:testDonate(uint96) (runs: 256, μ: 155493, ~: 156942)
LogbookTest:testDonateWithCommission(uint96,uint96) (runs: 256, μ: 152152, ~: 140464)
LogbookTest:testFork(uint96,string) (runs: 256, μ: 446796, ~: 451347)
LogbookTest:testForkRecursively(uint8,uint96) (runs: 256, μ: 4224034, ~: 1016125)
LogbookTest:testForkWithCommission(uint96,string,uint256) (runs: 256, μ: 542623, ~: 257710)
LogbookTest:testMulticall() (gas: 285685)
LogbookTest:testPublicSale() (gas: 202868)
LogbookTest:testPublish(string) (runs: 256, μ: 264518, ~: 264648)
LogbookTest:testPublishEn1000() (gas: 243576)
LogbookTest:testPublishEn140() (gas: 221340)
LogbookTest:testPublishEn200() (gas: 222925)
LogbookTest:testPublishEn2000() (gas: 270119)
LogbookTest:testPublishEn300() (gas: 225383)
LogbookTest:testPublishEn50() (gas: 218821)
LogbookTest:testPublishEn500() (gas: 230367)
LogbookTest:testPublishEn5000() (gas: 348595)
LogbookTest:testPublishZh100() (gas: 224601)
LogbookTest:testPublishZh20() (gas: 218803)
LogbookTest:testPublishZh200() (gas: 231171)
LogbookTest:testPublishZh2000() (gas: 371254)
LogbookTest:testPublishZh50() (gas: 221251)
LogbookTest:testPublishZh500() (gas: 251055)
LogbookTest:testPublishZh5000() (gas: 607789)
LogbookTest:testSetDescription() (gas: 140859)
LogbookTest:testSetForkPrice() (gas: 153948)
LogbookTest:testSetTitle() (gas: 168804)
LogbookTest:testSplitRoyalty(uint8,uint8,uint96) (runs: 256, μ: 2065544, ~: 637605)
LogbookTest:testWithdraw() (gas: 7296693)
LogbookNFTSVGTest:testTokenURI(uint8,uint8,uint16) (runs: 256, μ: 2026391, ~: 1315240)
SnapperTest:testCannotInitRegionByNotOwner() (gas: 11390)
SnapperTest:testCannotReInitRegion() (gas: 14423)
SnapperTest:testCannotTakeSnapshotBeforeInit() (gas: 15792)
SnapperTest:testCannotTakeSnapshotByNotOwner() (gas: 12528)
SnapperTest:testCannotTakeSnapshotWrongLastBlock() (gas: 49279)
SnapperTest:testCannotTakeSnapshotWrongSnapshotBlock() (gas: 24049)
SnapperTest:testInitRegion(uint256) (runs: 256, μ: 114604, ~: 114604)
SnapperTest:testTakeSnapshot() (gas: 47962)
ACLManagerTest:testCannotGrantACLManagerRole() (gas: 12231)
ACLManagerTest:testCannotGrantRoleByNonACLManager() (gas: 17403)
ACLManagerTest:testCannotGrantRoleToZeroAddress() (gas: 12220)
ACLManagerTest:testCannotRenounceRoleByACLManager() (gas: 12081)
ACLManagerTest:testCannotRenounceRoleByAttacker() (gas: 12371)
ACLManagerTest:testCannotTransferRoleByAttacker() (gas: 12498)
ACLManagerTest:testCannotTransferRoleToZeroAddress() (gas: 12218)
ACLManagerTest:testCannotGrantACLManagerRole() (gas: 12206)
ACLManagerTest:testCannotGrantRoleByNonACLManager() (gas: 17353)
ACLManagerTest:testCannotGrantRoleToZeroAddress() (gas: 12195)
ACLManagerTest:testCannotRenounceRoleByACLManager() (gas: 12056)
ACLManagerTest:testCannotRenounceRoleByAttacker() (gas: 12346)
ACLManagerTest:testCannotTransferRoleByAttacker() (gas: 12473)
ACLManagerTest:testCannotTransferRoleToZeroAddress() (gas: 12193)
ACLManagerTest:testGrantRole() (gas: 23547)
ACLManagerTest:testRenounceRole() (gas: 27841)
ACLManagerTest:testRoles() (gas: 15393)
ACLManagerTest:testTransferRole() (gas: 21528)
TheSpaceTest:testBatchBid() (gas: 690679)
TheSpaceTest:testBatchSetPixels(uint16,uint8) (runs: 256, μ: 369115, ~: 370766)
TheSpaceTest:testBidDefaultedToken() (gas: 409339)
TheSpaceTest:testBidExistingToken() (gas: 354974)
TheSpaceTest:testBidNewToken() (gas: 301167)
TheSpaceTest:testCanTransferFromIfSettleTax() (gas: 355017)
TheSpaceTest:testCannotBidExceedAllowance() (gas: 60907)
TheSpaceTest:testCannotBidOutBoundTokens() (gas: 260493)
TheSpaceTest:testCannotBidPriceTooLow() (gas: 341680)
TheSpaceTest:testCannotGetTaxWithNonExistingToken() (gas: 16426)
TheSpaceTest:testCannotGetTokenURIInLogicContract() (gas: 296920)
TheSpaceTest:testCannotSetColorByAttacker() (gas: 302856)
TheSpaceTest:testCannotSetConfigByAttacker() (gas: 12078)
TheSpaceTest:testCannotSetPixel(uint256) (runs: 256, μ: 312359, ~: 312359)
TheSpaceTest:testCannotSetPriceByNonOwner() (gas: 302932)
TheSpaceTest:testCannotSetTokenImageURIByNonACLManager() (gas: 11887)
TheSpaceTest:testCannotSetTotalSupplyByAttacker() (gas: 11883)
TheSpaceTest:testCannotTransferFromIfDefault() (gas: 394091)
TheSpaceTest:testCannotUpgradeByAttacker() (gas: 11564)
TheSpaceTest:testCollectableTax() (gas: 333312)
TheSpaceTest:testDefault() (gas: 390517)
BillboardTest:testAddToWhitelist() (gas: 37249)
BillboardTest:testApproveAndTransfer() (gas: 163591)
BillboardTest:testCalculateTax() (gas: 29386)
BillboardTest:testCannnotWithdrawTaxIfSmallAmount(uint8) (runs: 256, μ: 494337, ~: 508015)
BillboardTest:testCannnotWithdrawTaxIfZero() (gas: 460249)
BillboardTest:testCannotAddToWhitelistByAttacker() (gas: 11794)
BillboardTest:testCannotApproveByAttacker() (gas: 131471)
BillboardTest:testCannotClearAuctionIfAuctionNotEnded() (gas: 699881)
BillboardTest:testCannotClearAuctionOnNewBoard() (gas: 139068)
BillboardTest:testCannotMintBoardByAttacker() (gas: 13982)
BillboardTest:testCannotPlaceBidByAttacker() (gas: 145402)
BillboardTest:testCannotPlaceBidTwice(uint96) (runs: 256, μ: 746646, ~: 752877)
BillboardTest:testCannotRemoveToWhitelistByAttacker() (gas: 11883)
BillboardTest:testCannotSafeTransferByAttacker() (gas: 129295)
BillboardTest:testCannotSetBoardProprtiesByAttacker() (gas: 162092)
BillboardTest:testCannotSetIsOpenedByAttacker() (gas: 11751)
BillboardTest:testCannotSetTaxRateByAttacker() (gas: 11763)
BillboardTest:testCannotTransferByOperator() (gas: 133949)
BillboardTest:testCannotTransferToZeroAddress() (gas: 129480)
BillboardTest:testCannotUpgradeRegistryByAttacker() (gas: 11862)
BillboardTest:testCannotWithBidTwice(uint96) (runs: 256, μ: 1068400, ~: 1068400)
BillboardTest:testCannotWithdrawBidIfAuctionNotCleared(uint96) (runs: 256, μ: 866310, ~: 866310)
BillboardTest:testCannotWithdrawBidIfAuctionNotEnded(uint96) (runs: 256, μ: 741945, ~: 741945)
BillboardTest:testCannotWithdrawBidIfNotFound() (gas: 490558)
BillboardTest:testCannotWithdrawBidIfWon(uint96) (runs: 256, μ: 875710, ~: 875710)
BillboardTest:testCannotWithdrawTaxByAttacker() (gas: 21732)
BillboardTest:testClearAuctionIfAuctionEnded() (gas: 783620)
BillboardTest:testGetBids(uint8,uint8,uint8) (runs: 256, μ: 2979552, ~: 1548645)
BillboardTest:testGetTokenURI() (gas: 156314)
BillboardTest:testMintBoard() (gas: 225083)
BillboardTest:testMintBoardByWhitelist() (gas: 157611)
BillboardTest:testMintBoardIfOpened() (gas: 130625)
BillboardTest:testPlaceBidByWhitelist() (gas: 543703)
BillboardTest:testPlaceBidIfAuctionEnded() (gas: 1096931)
BillboardTest:testPlaceBidOnNewBoard(uint96) (runs: 256, μ: 557853, ~: 568576)
BillboardTest:testPlaceBidWithHigherPrice(uint96) (runs: 256, μ: 861923, ~: 868997)
BillboardTest:testPlaceBidWithSamePrices(uint96) (runs: 256, μ: 859723, ~: 871555)
BillboardTest:testPlaceBidZeroPrice() (gas: 429255)
BillboardTest:testRemoveToWhitelist() (gas: 24992)
BillboardTest:testSafeTransferByOperator() (gas: 142371)
BillboardTest:testSetBoardProperties() (gas: 307920)
BillboardTest:testSetBoardPropertiesAfterTransfer() (gas: 337266)
BillboardTest:testSetIsOpened() (gas: 15932)
BillboardTest:testSetTaxRate() (gas: 27329)
BillboardTest:testUpgradeRegistry() (gas: 2547606)
BillboardTest:testWithdrawBid(uint96) (runs: 256, μ: 1069195, ~: 1069195)
BillboardTest:testWithdrawTax(uint96) (runs: 256, μ: 581282, ~: 581282)
CurationTest:testCannotCurateERC20CurateZeroAmount() (gas: 12194)
CurationTest:testCannotCurateERC20EmptyURI() (gas: 15797)
CurationTest:testCannotCurateERC20IfNotApproval() (gas: 21624)
CurationTest:testCannotCurateERC20SelfCuration() (gas: 16031)
CurationTest:testCannotCurateERC20ZeroAddress() (gas: 15899)
CurationTest:testCannotCurateNativeTokenCurateZeroAmount() (gas: 9958)
CurationTest:testCannotCurateNativeTokenEmptyURI() (gas: 16468)
CurationTest:testCannotCurateNativeTokenSelfCuration() (gas: 16713)
CurationTest:testCannotCurateNativeTokenToContractRejector() (gas: 28554)
CurationTest:testCannotCurateNativeTokenZeroAddress() (gas: 16488)
CurationTest:testERC20Curation() (gas: 59908)
CurationTest:testNativeTokenCuration() (gas: 60085)
CurationTest:testNativeTokenCurationToContractAcceptor() (gas: 37466)
LogbookNFTSVGTest:testTokenURI(uint8,uint8,uint16) (runs: 256, μ: 2019505, ~: 1310779)
LogbookTest:testClaim() (gas: 135608)
LogbookTest:testDonate(uint96) (runs: 256, μ: 155485, ~: 156936)
LogbookTest:testDonateWithCommission(uint96,uint96) (runs: 256, μ: 150402, ~: 140444)
LogbookTest:testFork(uint96,string) (runs: 256, μ: 450748, ~: 453928)
LogbookTest:testForkRecursively(uint8,uint96) (runs: 256, μ: 4613856, ~: 1014389)
LogbookTest:testForkWithCommission(uint96,string,uint256) (runs: 256, μ: 469806, ~: 257636)
LogbookTest:testMulticall() (gas: 284999)
LogbookTest:testPublicSale() (gas: 204837)
LogbookTest:testPublish(string) (runs: 256, μ: 264065, ~: 263590)
LogbookTest:testPublishEn1000() (gas: 243477)
LogbookTest:testPublishEn140() (gas: 221241)
LogbookTest:testPublishEn200() (gas: 222826)
LogbookTest:testPublishEn2000() (gas: 270020)
LogbookTest:testPublishEn300() (gas: 225284)
LogbookTest:testPublishEn50() (gas: 218722)
LogbookTest:testPublishEn500() (gas: 230268)
LogbookTest:testPublishEn5000() (gas: 348496)
LogbookTest:testPublishZh100() (gas: 224502)
LogbookTest:testPublishZh20() (gas: 218704)
LogbookTest:testPublishZh200() (gas: 231104)
LogbookTest:testPublishZh2000() (gas: 371155)
LogbookTest:testPublishZh50() (gas: 221152)
LogbookTest:testPublishZh500() (gas: 250956)
LogbookTest:testPublishZh5000() (gas: 607690)
LogbookTest:testSetDescription() (gas: 140760)
LogbookTest:testSetForkPrice() (gas: 153925)
LogbookTest:testSetTitle() (gas: 168680)
LogbookTest:testSplitRoyalty(uint8,uint8,uint96) (runs: 256, μ: 2012966, ~: 636792)
LogbookTest:testWithdraw() (gas: 7284400)
SnapperTest:testCannotInitRegionByNotOwner() (gas: 11365)
SnapperTest:testCannotReInitRegion() (gas: 14373)
SnapperTest:testCannotTakeSnapshotBeforeInit() (gas: 15717)
SnapperTest:testCannotTakeSnapshotByNotOwner() (gas: 12478)
SnapperTest:testCannotTakeSnapshotWrongLastBlock() (gas: 49242)
SnapperTest:testCannotTakeSnapshotWrongSnapshotBlock() (gas: 23899)
SnapperTest:testInitRegion(uint256) (runs: 256, μ: 114408, ~: 114408)
SnapperTest:testTakeSnapshot() (gas: 47831)
TheSpaceTest:testBatchBid() (gas: 690308)
TheSpaceTest:testBatchSetPixels(uint16,uint8) (runs: 256, μ: 368725, ~: 370338)
TheSpaceTest:testBidDefaultedToken() (gas: 409416)
TheSpaceTest:testBidExistingToken() (gas: 355023)
TheSpaceTest:testBidNewToken() (gas: 301184)
TheSpaceTest:testCanTransferFromIfSettleTax() (gas: 355069)
TheSpaceTest:testCannotBidExceedAllowance() (gas: 60910)
TheSpaceTest:testCannotBidOutBoundTokens() (gas: 260482)
TheSpaceTest:testCannotBidPriceTooLow() (gas: 341674)
TheSpaceTest:testCannotGetTaxWithNonExistingToken() (gas: 16401)
TheSpaceTest:testCannotGetTokenURIInLogicContract() (gas: 298473)
TheSpaceTest:testCannotSetColorByAttacker() (gas: 302848)
TheSpaceTest:testCannotSetConfigByAttacker() (gas: 12053)
TheSpaceTest:testCannotSetPixel(uint256) (runs: 256, μ: 312357, ~: 312357)
TheSpaceTest:testCannotSetPriceByNonOwner() (gas: 302924)
TheSpaceTest:testCannotSetTokenImageURIByNonACLManager() (gas: 11862)
TheSpaceTest:testCannotSetTotalSupplyByAttacker() (gas: 11858)
TheSpaceTest:testCannotTransferFromIfDefault() (gas: 394147)
TheSpaceTest:testCannotUpgradeByAttacker() (gas: 11539)
TheSpaceTest:testCollectableTax() (gas: 333364)
TheSpaceTest:testDefault() (gas: 390575)
TheSpaceTest:testGetConfig() (gas: 14302)
TheSpaceTest:testGetExistingPixel() (gas: 309403)
TheSpaceTest:testGetNonExistingPixel() (gas: 60251)
TheSpaceTest:testGetNonExistingPrice() (gas: 19524)
TheSpaceTest:testGetOwner() (gas: 346900)
TheSpaceTest:testGetExistingPixel() (gas: 309428)
TheSpaceTest:testGetNonExistingPixel() (gas: 60258)
TheSpaceTest:testGetNonExistingPrice() (gas: 19529)
TheSpaceTest:testGetOwner() (gas: 346931)
TheSpaceTest:testGetOwnerOfNonExistingToken() (gas: 13346)
TheSpaceTest:testGetPixelsByOwnerWithNoPixels() (gas: 24265)
TheSpaceTest:testGetPixelsByOwnerWithOnePixel() (gas: 319489)
TheSpaceTest:testGetPixelsPageByOwnerWithPixels() (gas: 586574)
TheSpaceTest:testGetPrice() (gas: 297984)
TheSpaceTest:testGetTax() (gas: 375340)
TheSpaceTest:testGetTokenImageURI() (gas: 14407)
TheSpaceTest:testGetTokenURI() (gas: 331148)
TheSpaceTest:testSetColor() (gas: 328831)
TheSpaceTest:testSetMintTax() (gas: 269213)
TheSpaceTest:testSetPixel(uint256) (runs: 256, μ: 398774, ~: 398774)
TheSpaceTest:testSetPrice(uint256) (runs: 256, μ: 302135, ~: 302135)
TheSpaceTest:testSetPriceByOperator(uint256) (runs: 256, μ: 352082, ~: 352082)
TheSpaceTest:testSetPriceTooHigh() (gas: 312001)
TheSpaceTest:testSetTaxRate() (gas: 345387)
TheSpaceTest:testSetTokenImageURI() (gas: 353533)
TheSpaceTest:testSetTotalSupply(uint256) (runs: 256, μ: 349634, ~: 349641)
TheSpaceTest:testSetTreasuryShare() (gas: 381733)
TheSpaceTest:testSettleTax() (gas: 336899)
TheSpaceTest:testTaxCalculation() (gas: 397345)
TheSpaceTest:testTokenShouldBeDefaulted() (gas: 322983)
TheSpaceTest:testGetPixelsByOwnerWithNoPixels() (gas: 24283)
TheSpaceTest:testGetPixelsByOwnerWithOnePixel() (gas: 319322)
TheSpaceTest:testGetPixelsPageByOwnerWithPixels() (gas: 585976)
TheSpaceTest:testGetPrice() (gas: 298001)
TheSpaceTest:testGetTax() (gas: 375416)
TheSpaceTest:testGetTokenImageURI() (gas: 14307)
TheSpaceTest:testGetTokenURI() (gas: 330962)
TheSpaceTest:testSetColor() (gas: 328848)
TheSpaceTest:testSetMintTax() (gas: 269237)
TheSpaceTest:testSetPixel(uint256) (runs: 256, μ: 398816, ~: 398816)
TheSpaceTest:testSetPrice(uint256) (runs: 256, μ: 302152, ~: 302152)
TheSpaceTest:testSetPriceByOperator(uint256) (runs: 256, μ: 352105, ~: 352105)
TheSpaceTest:testSetPriceTooHigh() (gas: 312004)
TheSpaceTest:testSetTaxRate() (gas: 345451)
TheSpaceTest:testSetTokenImageURI() (gas: 353313)
TheSpaceTest:testSetTotalSupply(uint256) (runs: 256, μ: 349701, ~: 349708)
TheSpaceTest:testSetTreasuryShare() (gas: 381788)
TheSpaceTest:testSettleTax() (gas: 336965)
TheSpaceTest:testTaxCalculation() (gas: 397405)
TheSpaceTest:testTokenShouldBeDefaulted() (gas: 323029)
TheSpaceTest:testTotalSupply() (gas: 7613)
TheSpaceTest:testUpgradeTo() (gas: 3215589)
TheSpaceTest:testWithdrawTreasury() (gas: 352594)
TheSpaceTest:testWithdrawUBI() (gas: 375731)
TheSpaceTest:testUpgradeTo() (gas: 3215197)
TheSpaceTest:testWithdrawTreasury() (gas: 352672)
TheSpaceTest:testWithdrawUBI() (gas: 375819)
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -121,3 +121,5 @@ out/

.env.*
!.env.*.example

TODO
1 change: 1 addition & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"tabWidth": 2,
"printWidth": 120,
"plugins": ["prettier-plugin-solidity"],
"overrides": [
{
"files": "*.sol",
Expand Down
6 changes: 4 additions & 2 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
"editor.formatOnSave": true,
"solidity.formatter": "prettier",
"[solidity]": {
"editor.defaultFormatter": "JuanBlanco.solidity"
}
"editor.defaultFormatter": "NomicFoundation.hardhat-solidity"
},
"solidity.packageDefaultDependenciesContractsDirectory": "src",
"solidity.packageDefaultDependenciesDirectory": "lib"
}
12 changes: 11 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,16 @@ coverage :; forge coverage --report=summary
build: clean
forge build
test:
forge test --gas-report
forge test --gas-report -vvv
trace: clean
forge test -vvvvv --gas-report

# Static Analyzers
analyze-logbook :; slither src/Logbook/Logbook.sol
analyze-the-space :; slither src/TheSpace/TheSpace.sol
analyze-curation :; slither src/Curation/Curation.sol
analyze-billboard :; slither src/Billboard/Billboard.sol

# Deployments
## Logbook
deploy-logbook: clean
Expand All @@ -36,3 +42,7 @@ deploy-snapper: clean
## Curation
deploy-curation: clean
@forge create Curation --rpc-url ${ETH_RPC_URL} --private-key ${DEPLOYER_PRIVATE_KEY} --legacy --verify --etherscan-api-key ${ETHERSCAN_API_KEY}

## Billboard
deploy-billboard: clean
@forge create Billboard --rpc-url ${ETH_RPC_URL} --private-key ${DEPLOYER_PRIVATE_KEY} --constructor-args ${BILLBOARD_REGISTRY_ADDRESS} 1 "Billboard" "BLBD" --legacy --verify --etherscan-api-key ${ETHERSCAN_API_KEY}
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
| SpaceToken | Polygon Mainnet | [0x264808855b0a6a5a318d238c6ee9f299179f27fc](https://polygonscan.com/address/0x264808855b0a6a5a318d238c6ee9f299179f27fc) |
| TheSpace | Polygon Mainnet | [0x9b71045ac2a1563dc5ff8e0c537413a6aae16cd1](https://polygonscan.com/address/0x9b71045ac2a1563dc5ff8e0c537413a6aae16cd1) |
| TheSpaceRegistry | Polygon Mainnet | [0x8da7a7a48ebbd870358f2fd824e52e5142f44257](https://polygonscan.com/address/0x8da7a7a48ebbd870358f2fd824e52e5142f44257) |
| Billboard | Polygon Mumbai | [0x88EA16c2a69f50B9bc2E8f7684D425f33f29225F](https://mumbai.polygonscan.com/address/0x88EA16c2a69f50B9bc2E8f7684D425f33f29225F) |
| Billboard | Polygon Mainnet | / |

In the "Contract" tab of Polygonscan/Etherscan, you can see the contract code and ABI.

Expand Down Expand Up @@ -84,6 +86,12 @@ Testing
make test
```

Static Analyzers

```bash
make analyze-billboard
```

## Deployment

### Deploy on Local Node:
Expand Down
1 change: 1 addition & 0 deletions foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ remappings = [
]
verbosity = 3
gas_reports = ["*"]
solc_version = "0.8.22"

[profile.ci]
fuzz_runs = 1024
Expand Down
Loading
Loading