diff --git a/packages/nouns-assets/images/noundry/3-heads/head-shrimp-tempura.png b/packages/nouns-assets/images/noundry/3-heads/head-shrimp-tempura.png new file mode 100644 index 0000000000..bbec5d1f65 Binary files /dev/null and b/packages/nouns-assets/images/noundry/3-heads/head-shrimp-tempura.png differ diff --git a/packages/nouns-assets/package.json b/packages/nouns-assets/package.json index 6114606577..1f0c007f74 100644 --- a/packages/nouns-assets/package.json +++ b/packages/nouns-assets/package.json @@ -1,6 +1,6 @@ { "name": "@nouns/assets", - "version": "0.7.0", + "version": "0.8.0", "description": "Nouns run-length encoded image data", "author": "Nounders", "homepage": "https://nouns.wtf", diff --git a/packages/nouns-assets/src/image-data.json b/packages/nouns-assets/src/image-data.json index fe144e70e2..4642ee37dd 100644 --- a/packages/nouns-assets/src/image-data.json +++ b/packages/nouns-assets/src/image-data.json @@ -1942,6 +1942,10 @@ { "filename": "head-sand-castle", "data": "0x0003191407060001300100013001990f0002300199110001990b0003d8010004d8010003d8060003d8010004d8010003d8060003d8019904d8019903d8050008d8015f05d8040003d8015f08d8019901d804000ed804000ed8030010d8020010d8020010d8020010d802000cd8015f03d8020002d8069906d80299010004d8025f1ed8" + }, + { + "filename": "head-shrimp-tempura", + "data": "0x00031b1505090004ce100005ce0e0002e704ce0f0004e705ce0c0006e7010004ce010002e7010002e7050002e7015102e7060007e7030002e7015102e7060003e7015105e7010007e7050002e7015103e701510ae7040008e7015102e7010005e7050008e7015101e7010007e7050011e7010002e701000be7010014e7010019e701510ee7015103e7020002e7015104e7015101e7025104e7015102e7040008e7015109e706000ee70a0004e7010005e70600" } ], "glasses": [ diff --git a/packages/nouns-contracts/abi/contracts/interfaces/INounsDAOLogic.sol/INounsDAOLogic.json b/packages/nouns-contracts/abi/contracts/interfaces/INounsDAOLogic.sol/INounsDAOLogic.json new file mode 100644 index 0000000000..2e79665529 --- /dev/null +++ b/packages/nouns-contracts/abi/contracts/interfaces/INounsDAOLogic.sol/INounsDAOLogic.json @@ -0,0 +1,2075 @@ +[ + { + "inputs": [], + "name": "_acceptAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "_acceptVetoer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "_burnVetoPower", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint16", + "name": "newMinQuorumVotesBPS", + "type": "uint16" + }, + { + "internalType": "uint16", + "name": "newMaxQuorumVotesBPS", + "type": "uint16" + }, + { + "internalType": "uint32", + "name": "newQuorumCoefficient", + "type": "uint32" + } + ], + "name": "_setDynamicQuorumParams", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "erc20tokens", + "type": "address[]" + } + ], + "name": "_setErc20TokensToIncludeInFork", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newForkDAODeployer", + "type": "address" + } + ], + "name": "_setForkDAODeployer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newForkEscrow", + "type": "address" + } + ], + "name": "_setForkEscrow", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forkEscrow_", + "type": "address" + }, + { + "internalType": "address", + "name": "forkDAODeployer_", + "type": "address" + }, + { + "internalType": "address[]", + "name": "erc20TokensToIncludeInFork_", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "forkPeriod_", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "forkThresholdBPS_", + "type": "uint256" + } + ], + "name": "_setForkParams", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newForkPeriod", + "type": "uint256" + } + ], + "name": "_setForkPeriod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newForkThresholdBPS", + "type": "uint256" + } + ], + "name": "_setForkThresholdBPS", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "newLastMinuteWindowInBlocks", + "type": "uint32" + } + ], + "name": "_setLastMinuteWindowInBlocks", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint16", + "name": "newMaxQuorumVotesBPS", + "type": "uint16" + } + ], + "name": "_setMaxQuorumVotesBPS", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint16", + "name": "newMinQuorumVotesBPS", + "type": "uint16" + } + ], + "name": "_setMinQuorumVotesBPS", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "newObjectionPeriodDurationInBlocks", + "type": "uint32" + } + ], + "name": "_setObjectionPeriodDurationInBlocks", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPendingAdmin", + "type": "address" + } + ], + "name": "_setPendingAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPendingVetoer", + "type": "address" + } + ], + "name": "_setPendingVetoer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newProposalThresholdBPS", + "type": "uint256" + } + ], + "name": "_setProposalThresholdBPS", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "newProposalUpdatablePeriodInBlocks", + "type": "uint32" + } + ], + "name": "_setProposalUpdatablePeriodInBlocks", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "newQuorumCoefficient", + "type": "uint32" + } + ], + "name": "_setQuorumCoefficient", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newTimelock", + "type": "address" + }, + { + "internalType": "address", + "name": "newTimelockV1", + "type": "address" + }, + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "_setTimelocksAndAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newVotingDelay", + "type": "uint256" + } + ], + "name": "_setVotingDelay", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newVotingPeriod", + "type": "uint256" + } + ], + "name": "_setVotingPeriod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "_withdraw", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "_zeroOutVoteSnapshotBlockSwitchProposalId", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "adjustedTotalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + } + ], + "name": "cancel", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "sig", + "type": "bytes" + } + ], + "name": "cancelSig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "support", + "type": "uint8" + } + ], + "name": "castRefundableVote", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "support", + "type": "uint8" + }, + { + "internalType": "uint32", + "name": "clientId", + "type": "uint32" + } + ], + "name": "castRefundableVote", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "support", + "type": "uint8" + }, + { + "internalType": "string", + "name": "reason", + "type": "string" + } + ], + "name": "castRefundableVoteWithReason", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "support", + "type": "uint8" + }, + { + "internalType": "string", + "name": "reason", + "type": "string" + }, + { + "internalType": "uint32", + "name": "clientId", + "type": "uint32" + } + ], + "name": "castRefundableVoteWithReason", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "support", + "type": "uint8" + } + ], + "name": "castVote", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "support", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "castVoteBySig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "support", + "type": "uint8" + }, + { + "internalType": "string", + "name": "reason", + "type": "string" + } + ], + "name": "castVoteWithReason", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "againstVotes", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "adjustedTotalSupply_", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint16", + "name": "minQuorumVotesBPS", + "type": "uint16" + }, + { + "internalType": "uint16", + "name": "maxQuorumVotesBPS", + "type": "uint16" + }, + { + "internalType": "uint32", + "name": "quorumCoefficient", + "type": "uint32" + } + ], + "internalType": "struct NounsDAOTypes.DynamicQuorumParams", + "name": "params", + "type": "tuple" + } + ], + "name": "dynamicQuorumVotes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "erc20TokensToIncludeInFork", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "proposalIds", + "type": "uint256[]" + }, + { + "internalType": "string", + "name": "reason", + "type": "string" + } + ], + "name": "escrowToFork", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + } + ], + "name": "execute", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "executeFork", + "outputs": [ + { + "internalType": "address", + "name": "forkTreasury", + "type": "address" + }, + { + "internalType": "address", + "name": "forkToken", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "forkDAODeployer", + "outputs": [ + { + "internalType": "contract IForkDAODeployer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "forkEndTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "forkEscrow", + "outputs": [ + { + "internalType": "contract INounsDAOForkEscrow", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "forkPeriod", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "forkThreshold", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "forkThresholdBPS", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + } + ], + "name": "getActions", + "outputs": [ + { + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + }, + { + "internalType": "string[]", + "name": "signatures", + "type": "string[]" + }, + { + "internalType": "bytes[]", + "name": "calldatas", + "type": "bytes[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "blockNumber_", + "type": "uint256" + } + ], + "name": "getDynamicQuorumParamsAt", + "outputs": [ + { + "components": [ + { + "internalType": "uint16", + "name": "minQuorumVotesBPS", + "type": "uint16" + }, + { + "internalType": "uint16", + "name": "maxQuorumVotesBPS", + "type": "uint16" + }, + { + "internalType": "uint32", + "name": "quorumCoefficient", + "type": "uint32" + } + ], + "internalType": "struct NounsDAOTypes.DynamicQuorumParams", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "voter", + "type": "address" + } + ], + "name": "getReceipt", + "outputs": [ + { + "components": [ + { + "internalType": "bool", + "name": "hasVoted", + "type": "bool" + }, + { + "internalType": "uint8", + "name": "support", + "type": "uint8" + }, + { + "internalType": "uint96", + "name": "votes", + "type": "uint96" + } + ], + "internalType": "struct NounsDAOTypes.Receipt", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "proposalIds", + "type": "uint256[]" + }, + { + "internalType": "string", + "name": "reason", + "type": "string" + } + ], + "name": "joinFork", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "lastMinuteWindowInBlocks", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "latestProposalIds", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxQuorumVotes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minQuorumVotes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "nouns", + "outputs": [ + { + "internalType": "contract NounsTokenLike", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "numTokensInForkEscrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "objectionPeriodDurationInBlocks", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingVetoer", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proposalCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "firstProposalId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastProposalId", + "type": "uint256" + }, + { + "internalType": "uint16", + "name": "proposalEligibilityQuorumBps", + "type": "uint16" + }, + { + "internalType": "bool", + "name": "excludeCanceled", + "type": "bool" + }, + { + "internalType": "bool", + "name": "requireVotingEnded", + "type": "bool" + }, + { + "internalType": "uint32[]", + "name": "votingClientIds", + "type": "uint32[]" + } + ], + "name": "proposalDataForRewards", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "endBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "objectionPeriodEndBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "forVotes", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "againstVotes", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "abstainVotes", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "creationTimestamp", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "clientId", + "type": "uint32" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "votes", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "txs", + "type": "uint32" + } + ], + "internalType": "struct NounsDAOTypes.ClientVoteData[]", + "name": "voteData", + "type": "tuple[]" + } + ], + "internalType": "struct NounsDAOTypes.ProposalForRewards[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proposalThreshold", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proposalThresholdBPS", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proposalUpdatablePeriodInBlocks", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + } + ], + "name": "proposals", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "proposer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "proposalThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quorumVotes", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "eta", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "forVotes", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "againstVotes", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "abstainVotes", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "canceled", + "type": "bool" + }, + { + "internalType": "bool", + "name": "vetoed", + "type": "bool" + }, + { + "internalType": "bool", + "name": "executed", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "creationBlock", + "type": "uint256" + } + ], + "internalType": "struct NounsDAOTypes.ProposalCondensedV2", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + } + ], + "name": "proposalsV3", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "proposer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "proposalThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quorumVotes", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "eta", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "forVotes", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "againstVotes", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "abstainVotes", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "canceled", + "type": "bool" + }, + { + "internalType": "bool", + "name": "vetoed", + "type": "bool" + }, + { + "internalType": "bool", + "name": "executed", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "creationBlock", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "signers", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "updatePeriodEndBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "objectionPeriodEndBlock", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "executeOnTimelockV1", + "type": "bool" + } + ], + "internalType": "struct NounsDAOTypes.ProposalCondensedV3", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + }, + { + "internalType": "string[]", + "name": "signatures", + "type": "string[]" + }, + { + "internalType": "bytes[]", + "name": "calldatas", + "type": "bytes[]" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint32", + "name": "clientId", + "type": "uint32" + } + ], + "name": "propose", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + }, + { + "internalType": "string[]", + "name": "signatures", + "type": "string[]" + }, + { + "internalType": "bytes[]", + "name": "calldatas", + "type": "bytes[]" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + } + ], + "name": "propose", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "sig", + "type": "bytes" + }, + { + "internalType": "address", + "name": "signer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "expirationTimestamp", + "type": "uint256" + } + ], + "internalType": "struct NounsDAOTypes.ProposerSignature[]", + "name": "proposerSignatures", + "type": "tuple[]" + }, + { + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + }, + { + "internalType": "string[]", + "name": "signatures", + "type": "string[]" + }, + { + "internalType": "bytes[]", + "name": "calldatas", + "type": "bytes[]" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + } + ], + "name": "proposeBySigs", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "sig", + "type": "bytes" + }, + { + "internalType": "address", + "name": "signer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "expirationTimestamp", + "type": "uint256" + } + ], + "internalType": "struct NounsDAOTypes.ProposerSignature[]", + "name": "proposerSignatures", + "type": "tuple[]" + }, + { + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + }, + { + "internalType": "string[]", + "name": "signatures", + "type": "string[]" + }, + { + "internalType": "bytes[]", + "name": "calldatas", + "type": "bytes[]" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint32", + "name": "clientId", + "type": "uint32" + } + ], + "name": "proposeBySigs", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + }, + { + "internalType": "string[]", + "name": "signatures", + "type": "string[]" + }, + { + "internalType": "bytes[]", + "name": "calldatas", + "type": "bytes[]" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + } + ], + "name": "proposeOnTimelockV1", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + } + ], + "name": "queue", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "quorumParamsCheckpoints", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "fromBlock", + "type": "uint32" + }, + { + "components": [ + { + "internalType": "uint16", + "name": "minQuorumVotesBPS", + "type": "uint16" + }, + { + "internalType": "uint16", + "name": "maxQuorumVotesBPS", + "type": "uint16" + }, + { + "internalType": "uint32", + "name": "quorumCoefficient", + "type": "uint32" + } + ], + "internalType": "struct NounsDAOTypes.DynamicQuorumParams", + "name": "params", + "type": "tuple" + } + ], + "internalType": "struct NounsDAOTypes.DynamicQuorumParamsCheckpoint[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "quorumParamsCheckpoints", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "fromBlock", + "type": "uint32" + }, + { + "components": [ + { + "internalType": "uint16", + "name": "minQuorumVotesBPS", + "type": "uint16" + }, + { + "internalType": "uint16", + "name": "maxQuorumVotesBPS", + "type": "uint16" + }, + { + "internalType": "uint32", + "name": "quorumCoefficient", + "type": "uint32" + } + ], + "internalType": "struct NounsDAOTypes.DynamicQuorumParams", + "name": "params", + "type": "tuple" + } + ], + "internalType": "struct NounsDAOTypes.DynamicQuorumParamsCheckpoint", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + } + ], + "name": "quorumVotes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "quorumVotesBPS", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + } + ], + "name": "state", + "outputs": [ + { + "internalType": "enum NounsDAOTypes.ProposalState", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "timelock", + "outputs": [ + { + "internalType": "contract INounsDAOExecutor", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "timelockV1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + }, + { + "internalType": "string[]", + "name": "signatures", + "type": "string[]" + }, + { + "internalType": "bytes[]", + "name": "calldatas", + "type": "bytes[]" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "string", + "name": "updateMessage", + "type": "string" + } + ], + "name": "updateProposal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "sig", + "type": "bytes" + }, + { + "internalType": "address", + "name": "signer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "expirationTimestamp", + "type": "uint256" + } + ], + "internalType": "struct NounsDAOTypes.ProposerSignature[]", + "name": "proposerSignatures", + "type": "tuple[]" + }, + { + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + }, + { + "internalType": "string[]", + "name": "signatures", + "type": "string[]" + }, + { + "internalType": "bytes[]", + "name": "calldatas", + "type": "bytes[]" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "string", + "name": "updateMessage", + "type": "string" + } + ], + "name": "updateProposalBySigs", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "string", + "name": "updateMessage", + "type": "string" + } + ], + "name": "updateProposalDescription", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + }, + { + "internalType": "string[]", + "name": "signatures", + "type": "string[]" + }, + { + "internalType": "bytes[]", + "name": "calldatas", + "type": "bytes[]" + }, + { + "internalType": "string", + "name": "updateMessage", + "type": "string" + } + ], + "name": "updateProposalTransactions", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + } + ], + "name": "veto", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "vetoer", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "voteSnapshotBlockSwitchProposalId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "votingDelay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "votingPeriod", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "withdrawDAONounsFromEscrowIncreasingTotalSupply", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + } + ], + "name": "withdrawDAONounsFromEscrowToTreasury", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + } + ], + "name": "withdrawFromForkEscrow", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/packages/nouns-subgraph/README.md b/packages/nouns-subgraph/README.md index 2d449971a4..551fd0788a 100644 --- a/packages/nouns-subgraph/README.md +++ b/packages/nouns-subgraph/README.md @@ -46,6 +46,16 @@ yarn deploy:[network] # Supports rinkeby and mainnet yarn deploy [organization]/[subgraph-name] ``` +### Compile and deploy to The Graph studio for The Graph's decentralized network + +```sh +# Auth (only the first time) +yarn graph auth [deploy-key] --product=subgraph-studio + +# Deploy +yarn deploy-studio:[network] # mainnet|sepolia +``` + ## Running a local deployment Make sure you have Docker installed. diff --git a/packages/nouns-subgraph/config/sepolia.json b/packages/nouns-subgraph/config/sepolia.json index 34b1f324ec..c0225fad67 100644 --- a/packages/nouns-subgraph/config/sepolia.json +++ b/packages/nouns-subgraph/config/sepolia.json @@ -1,19 +1,19 @@ { "network": "sepolia", "nounsToken": { - "address": "0x03439d47983d48C0402D2e88C5F8368d6B6BaC77", - "startBlock": 5301488 + "address": "0x4C4674bb72a096855496a7204962297bd7e12b85", + "startBlock": 3594846 }, "nounsAuctionHouse": { - "address": "0x09BD4d1066a2f4AD4445f60De356bfc9494b5C0d", - "startBlock": 5301519 + "address": "0x488609b7113FCf3B761A05956300d605E8f6BcAf", + "startBlock": 3594847 }, "nounsDAO": { - "address": "0x442961F79C3968f908ed295a5DEbfcD9aC1712B6", - "startBlock": 5301556 + "address": "0x35d2670d7C8931AACdd37C89Ddcb0638c3c44A57", + "startBlock": 3594849 }, "nounsDAOData": { - "address": "0xF82152a4322800E15F14eD85e490Fe12b815E6c3", - "startBlock": 5301568 + "address": "0x9040f720AA8A693F950B9cF94764b4b06079D002", + "startBlock": 3691326 } } diff --git a/packages/nouns-subgraph/package.json b/packages/nouns-subgraph/package.json index c4336316f9..57072224a9 100644 --- a/packages/nouns-subgraph/package.json +++ b/packages/nouns-subgraph/package.json @@ -28,6 +28,8 @@ "deploy:goerli": "yarn clean && yarn prepare:goerli && yarn codegen && yarn graph build && goldsky subgraph deploy nouns-v3-goerli/0.1.6", "deploy:sepolia": "yarn clean && yarn prepare:sepolia && yarn codegen && yarn graph build && goldsky subgraph deploy nouns-sepolia-client-incentives/0.1.1", "deploy:mainnet": "yarn clean && yarn prepare:mainnet && yarn codegen && yarn graph build && goldsky subgraph deploy nouns/0.2.5", + "deploy-studio:mainnet": "yarn clean && yarn prepare:mainnet && yarn codegen && yarn graph build && graph deploy --studio nouns", + "deploy-studio:sepolia": "yarn clean && yarn prepare:sepolia && yarn codegen && yarn graph build && graph deploy --studio nouns-sepolia", "mustache": "mustache" }, "devDependencies": { diff --git a/packages/nouns-subgraph/schema.graphql b/packages/nouns-subgraph/schema.graphql index f1c3b9d653..a975fb6152 100644 --- a/packages/nouns-subgraph/schema.graphql +++ b/packages/nouns-subgraph/schema.graphql @@ -76,7 +76,7 @@ type Noun @entity { } type Bid @entity { - "Bid transaction hash" + "Noun.id-amount" id: ID! "The Noun being bid on" @@ -91,6 +91,9 @@ type Bid @entity { "Block number of the bid" blockNumber: BigInt! + "Transaction hash for the bid" + txHash: Bytes! + "Index of transaction within block" txIndex: BigInt! @@ -226,6 +229,9 @@ type Proposal @entity { "The proposal creation transaction hash" createdTransactionHash: Bytes! + "The proposal's last update transaction hash" + lastUpdatedTransactionHash: Bytes! + "Block number from where the voting starts" startBlock: BigInt! @@ -298,24 +304,36 @@ type Proposal @entity { "The timestamp when this proposal was canceled" canceledTimestamp: BigInt + "The transaction hash when the proposal was canceled" + canceledTransactionHash: Bytes + "The block number at which this proposal was executed" executedBlock: BigInt "The timestamp when this proposal was executed" executedTimestamp: BigInt + "The transaction hash when the proposal was executed" + executedTransactionHash: Bytes + "The block number at which this proposal was vetoed" vetoedBlock: BigInt "The timestamp when this proposal was vetoed" vetoedTimestamp: BigInt + "The transaction hash when the proposal was vetoed" + vetoedTransactionHash: Bytes + "The block number at which this proposal was queued" queuedBlock: BigInt "The timestamp when this proposal was queued" queuedTimestamp: BigInt + "The transaction hash when the proposal was queued" + queuedTransactionHash: Bytes + "The ID of the client that facilitated this proposal" clientId: Int! } @@ -332,6 +350,9 @@ type ProposalVersion @entity(immutable: true) { "The block timestamp of the update" createdAt: BigInt! + "The transaction hash of the update" + createdTransactionHash: Bytes! + "Targets data for the change" targets: [Bytes!] @@ -388,6 +409,9 @@ type Vote @entity { "The timestamp of the block the vote is in" blockTimestamp: BigInt! + "The transaction hash of the vote" + transactionHash: Bytes! + "The ID of the client that facilitated this vote" clientId: Int! } @@ -478,6 +502,9 @@ type ProposalCandidate @entity { "The block number at which this candidate was canceled" canceledBlock: BigInt + "The transaction hash at which this candidate was canceled" + canceledTransactionHash: Bytes + "Latest version of the proposal" latestVersion: ProposalCandidateVersion! @@ -579,6 +606,9 @@ type ProposalCandidateSignature @entity { "The signature's creation block" createdBlock: BigInt! + + "The signature's transaction hash" + createdTransactionHash: Bytes! } type ProposalFeedback @entity(immutable: true) { diff --git a/packages/nouns-subgraph/src/nouns-auction-house.ts b/packages/nouns-subgraph/src/nouns-auction-house.ts index cb2194134e..b6b59d6d21 100644 --- a/packages/nouns-subgraph/src/nouns-auction-house.ts +++ b/packages/nouns-subgraph/src/nouns-auction-house.ts @@ -55,6 +55,7 @@ export function handleAuctionBid(event: AuctionBid): void { bid.bidder = bidder.id; bid.amount = auction.amount; bid.noun = auction.noun; + bid.txHash = event.transaction.hash; bid.txIndex = event.transaction.index; bid.blockNumber = event.block.number; bid.blockTimestamp = event.block.timestamp; diff --git a/packages/nouns-subgraph/src/nouns-dao-data.ts b/packages/nouns-subgraph/src/nouns-dao-data.ts index 0aaa274d4d..91b84e4361 100644 --- a/packages/nouns-subgraph/src/nouns-dao-data.ts +++ b/packages/nouns-subgraph/src/nouns-dao-data.ts @@ -91,6 +91,7 @@ export function handleProposalCandidateCanceled(event: ProposalCandidateCanceled candidate.canceled = true; candidate.canceledTimestamp = event.block.timestamp; candidate.canceledBlock = event.block.number; + candidate.canceledTransactionHash = event.transaction.hash; candidate.save(); } @@ -125,6 +126,7 @@ export function handleSignatureAdded(event: SignatureAdded): void { candidateSig.reason = event.params.reason; candidateSig.createdBlock = event.block.number; candidateSig.createdTimestamp = event.block.timestamp; + candidateSig.createdTransactionHash = event.transaction.hash; candidateSig.save(); } diff --git a/packages/nouns-subgraph/src/nouns-dao.ts b/packages/nouns-subgraph/src/nouns-dao.ts index 98423cae20..958260d759 100644 --- a/packages/nouns-subgraph/src/nouns-dao.ts +++ b/packages/nouns-subgraph/src/nouns-dao.ts @@ -75,6 +75,7 @@ export function handleProposalCreated(event: ProposalCreated): void { proposal.createdBlock = event.block.number; proposal.lastUpdatedTimestamp = event.block.timestamp; proposal.lastUpdatedBlock = event.block.number; + proposal.lastUpdatedTransactionHash = event.transaction.hash; proposal.createdTransactionHash = event.transaction.hash; proposal.startBlock = event.params.startBlock; proposal.endBlock = event.params.endBlock; @@ -182,6 +183,7 @@ export function handleProposalUpdated(event: ProposalUpdated): void { // Then update the proposal to the latest state proposal.lastUpdatedTimestamp = event.block.timestamp; proposal.lastUpdatedBlock = event.block.number; + proposal.lastUpdatedTransactionHash = event.transaction.hash; proposal.targets = changetype(event.params.targets); proposal.values = event.params.values; proposal.signatures = event.params.signatures; @@ -243,6 +245,7 @@ export function handleProposalCanceled(event: ProposalCanceled): void { proposal.status = STATUS_CANCELLED; proposal.canceledBlock = event.block.number; proposal.canceledTimestamp = event.block.timestamp; + proposal.canceledTransactionHash = event.transaction.hash; proposal.save(); } @@ -252,6 +255,7 @@ export function handleProposalVetoed(event: ProposalVetoed): void { proposal.status = STATUS_VETOED; proposal.vetoedBlock = event.block.number; proposal.vetoedTimestamp = event.block.timestamp; + proposal.vetoedTransactionHash = event.transaction.hash; proposal.save(); } @@ -263,6 +267,7 @@ export function handleProposalQueued(event: ProposalQueued): void { proposal.executionETA = event.params.eta; proposal.queuedBlock = event.block.number; proposal.queuedTimestamp = event.block.timestamp; + proposal.queuedTransactionHash = event.transaction.hash; proposal.save(); governance.proposalsQueued = governance.proposalsQueued.plus(BIGINT_ONE); @@ -277,6 +282,7 @@ export function handleProposalExecuted(event: ProposalExecuted): void { proposal.executionETA = null; proposal.executedBlock = event.block.number; proposal.executedTimestamp = event.block.timestamp; + proposal.executedTransactionHash = event.transaction.hash; proposal.save(); governance.proposalsQueued = governance.proposalsQueued.minus(BIGINT_ONE); @@ -301,6 +307,7 @@ export function handleVoteCast(event: VoteCast): void { vote.nouns = voter.nounsRepresented; vote.blockNumber = event.block.number; vote.blockTimestamp = event.block.timestamp; + vote.transactionHash = event.transaction.hash; if (event.params.reason != '') { vote.reason = event.params.reason; @@ -399,6 +406,7 @@ function captureProposalVersion( previousVersion.proposal = proposal.id; previousVersion.createdBlock = proposal.lastUpdatedBlock!; previousVersion.createdAt = proposal.lastUpdatedTimestamp!; + previousVersion.createdTransactionHash = proposal.lastUpdatedTransactionHash!; previousVersion.targets = proposal.targets; previousVersion.values = proposal.values; previousVersion.signatures = proposal.signatures; diff --git a/packages/nouns-webapp/package.json b/packages/nouns-webapp/package.json index 3c38176077..5c60173e8c 100644 --- a/packages/nouns-webapp/package.json +++ b/packages/nouns-webapp/package.json @@ -15,7 +15,7 @@ "@lingui/macro": "3.13.3", "@lingui/react": "3.13.3", "@netlify/functions": "^0.7.2", - "@nouns/assets": "^0.7.0", + "@nouns/assets": "^0.8.0", "@nouns/sdk": "^0.4.0", "@reduxjs/toolkit": "^1.6.0", "@testing-library/jest-dom": "^5.11.4", diff --git a/packages/nouns-webapp/src/state/slices/pastAuctions.ts b/packages/nouns-webapp/src/state/slices/pastAuctions.ts index e4e6a17144..ea5a835ce9 100644 --- a/packages/nouns-webapp/src/state/slices/pastAuctions.ts +++ b/packages/nouns-webapp/src/state/slices/pastAuctions.ts @@ -30,7 +30,7 @@ const reduxSafePastAuctions = (data: any): AuctionState[] => { sender: bid.bidder.id, value: BigNumber.from(bid.amount).toJSON(), extended: false, - transactionHash: bid.id, + transactionHash: bid.txHash, transactionIndex: Number(bid.txIndex), timestamp: BigNumber.from(bid.blockTimestamp).toJSON(), }; diff --git a/packages/nouns-webapp/src/wrappers/subgraph.ts b/packages/nouns-webapp/src/wrappers/subgraph.ts index 6b3e831ed9..60beb81d9e 100644 --- a/packages/nouns-webapp/src/wrappers/subgraph.ts +++ b/packages/nouns-webapp/src/wrappers/subgraph.ts @@ -10,6 +10,7 @@ export interface IBid { amount: BigNumber; blockNumber: number; blockTimestamp: number; + txHash: string; txIndex?: number; noun: { id: number; @@ -386,6 +387,7 @@ export const latestAuctionsQuery = () => gql` amount blockNumber blockTimestamp + txHash txIndex bidder { id