From f370af4778cba393173ce9276cb0d6956e020ea4 Mon Sep 17 00:00:00 2001 From: Dave Hrdlicka Date: Mon, 17 Oct 2022 15:54:02 +0200 Subject: [PATCH 1/8] Rough first sketch of question/answer flow --- contracts/GoldenProtocol.sol | 166 +++++++++ contracts/libraries/AddressSet.sol | 61 ++++ deploy/0_GoldenProtocol.ts | 20 + test/GoldenProtocol.ts | 103 ++++++ test/GoldenSchemaGovernor.ts | 9 +- test/utils/index.ts | 2 + .../GoldenProtocol.sol/GoldenProtocol.ts | 293 +++++++++++++++ .../GoldenProtocolQuestion.ts | 345 ++++++++++++++++++ .../contracts/GoldenProtocol.sol/Question.ts | 245 +++++++++++++ .../contracts/GoldenProtocol.sol/index.ts | 5 + typechain/contracts/index.ts | 2 + .../GoldenProtocolQuestion__factory.ts | 320 ++++++++++++++++ .../GoldenProtocol__factory.ts | 205 +++++++++++ .../GoldenProtocol.sol/Question__factory.ts | 238 ++++++++++++ .../contracts/GoldenProtocol.sol/index.ts | 5 + typechain/factories/contracts/index.ts | 1 + typechain/index.ts | 4 + 17 files changed, 2022 insertions(+), 2 deletions(-) create mode 100644 contracts/GoldenProtocol.sol create mode 100644 contracts/libraries/AddressSet.sol create mode 100644 deploy/0_GoldenProtocol.ts create mode 100644 test/GoldenProtocol.ts create mode 100644 typechain/contracts/GoldenProtocol.sol/GoldenProtocol.ts create mode 100644 typechain/contracts/GoldenProtocol.sol/GoldenProtocolQuestion.ts create mode 100644 typechain/contracts/GoldenProtocol.sol/Question.ts create mode 100644 typechain/contracts/GoldenProtocol.sol/index.ts create mode 100644 typechain/factories/contracts/GoldenProtocol.sol/GoldenProtocolQuestion__factory.ts create mode 100644 typechain/factories/contracts/GoldenProtocol.sol/GoldenProtocol__factory.ts create mode 100644 typechain/factories/contracts/GoldenProtocol.sol/Question__factory.ts create mode 100644 typechain/factories/contracts/GoldenProtocol.sol/index.ts diff --git a/contracts/GoldenProtocol.sol b/contracts/GoldenProtocol.sol new file mode 100644 index 00000000..c6028ec8 --- /dev/null +++ b/contracts/GoldenProtocol.sol @@ -0,0 +1,166 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.16; + +import '@openzeppelin/contracts/access/Ownable.sol'; + +import './libraries/AddressSet.sol'; + +/// @custom:security-contact security@golden.com +contract GoldenProtocol is Ownable { + using AddressSet for AddressSet.Set; + // This is not going to scale well... how to keep track of questions without this? + AddressSet.Set _questions; + string[] entities; + uint256 public minimumVotes; + + constructor(uint256 _minimumVotes) Ownable() { + minimumVotes = _minimumVotes; + } + + function setMinimumVotes(uint256 _minimumVotes) public onlyOwner { + minimumVotes = _minimumVotes; + } + + function createQuestion( + bytes16 subjectUUID, + bytes16 predicateUUID, + uint256 bounty + ) public returns (address) { + // TODO: Creating new contracts is going to be very expensive. + // Is there a cheaper alternative to encapsulate the question logic? + GoldenProtocolQuestion newQuestion = new GoldenProtocolQuestion( + address(this), + msg.sender, + subjectUUID, + predicateUUID, + bounty + ); + address newQuestionAddress = address(newQuestion); + _questions.insert(newQuestionAddress); + return newQuestionAddress; + } + + // TODO: This is not going to scale well... how to keep track of questions without this? + function questions() public view returns (address[] memory) { + return _questions.keyList; + } +} + +contract GoldenProtocolQuestion { + using AddressSet for AddressSet.Set; + + address public owner; + address public asker; + uint256 public bounty; + bytes16 public subjectUUID; + bytes16 public predicateUUID; + string public answer; + + AddressSet.Set answerers; + AddressSet.Set verifiers; + + // Mapping of answerer address to their answer + mapping(address => string) answerByAnswerer; + + // Mapping of voter address to the index of an answer + mapping(address => uint256) answerIndexByVerifier; + + // Mapping of answerer address to their vote count (score) + mapping(address => uint256) voteCountByAnswerer; + + // Helper struct for consensus/payout algorithms + struct Answer { + address answerer; + string answer; + uint256 voteCount; + } + + constructor( + address _owner, + address _asker, + bytes16 _subjectUUID, + bytes16 _predicateUUID, + uint256 _bounty + ) { + owner = _owner; + asker = _asker; + subjectUUID = _subjectUUID; + predicateUUID = _predicateUUID; + bounty = _bounty; + } + + modifier onlyAsker() { + require(msg.sender == asker, 'GoldenProtocolQuestion: onlyAsker'); + _; + } + + function addAnswer(string calldata _answer) public { + address answerer = msg.sender; + answerByAnswerer[answerer] = _answer; + answerers.upsert(answerer); + voteCountByAnswerer[answerer] = 0; + } + + function answers() public view returns (string[] memory) { + string[] memory _answers = new string[](answerers.count()); + for (uint256 i = 0; i < answerers.count(); i++) { + _answers[i] = answerByAnswerer[answerers.keyAtIndex(i)]; + } + return _answers; + } + + function upvote(uint256 index) public { + require( + answerers.count() > index, + 'GoldenProtocolQuestion: there is no answer at that index' + ); + address answerer = answerers.keyAtIndex(index); + address verifier = msg.sender; + voteCountByAnswerer[answerer] += 1; + answerIndexByVerifier[verifier] = index; + verifiers.upsert(verifier); + } + + function votes() public view returns (uint256[] memory) { + uint256[] memory _votes = new uint256[](answerers.count()); + for (uint256 i = 0; i < answerers.count(); i++) { + _votes[i] = voteCountByAnswerer[answerers.keyAtIndex(i)]; + } + return _votes; + } + + function topAnswer() public view returns (Answer memory) { + uint256 maxVotes = 0; + uint256 maxVotesIndex = 0; + for (uint256 i = 0; i < answerers.count(); i++) { + uint256 voteCount = voteCountByAnswerer[answerers.keyAtIndex(i)]; + if (voteCount >= maxVotes) { + maxVotes = voteCount; + maxVotesIndex = i; + } + } + address answerer = answerers.keyAtIndex(maxVotesIndex); + return (Answer(answerer, answerByAnswerer[answerer], maxVotes)); + } + + // TODO: Pay out the bounty to the best answer, skim a small fee for the voters and protocol + function payout() public onlyAsker { + Answer memory _topAnswer = topAnswer(); + GoldenProtocol protocol = GoldenProtocol(owner); + require( + protocol.minimumVotes() <= _topAnswer.voteCount, + 'GoldenProtocolQuestion: payout: minimumVotes not met' + ); + address payable answerer = payable(_topAnswer.answerer); + answerer.transfer(bounty); + } + + // Utils + function hashAnswer(address answerer, string memory value) + public + pure + returns (uint256) + { + return uint256(keccak256(abi.encode(answerer, value))); + } +} diff --git a/contracts/libraries/AddressSet.sol b/contracts/libraries/AddressSet.sol new file mode 100644 index 00000000..fac06d8c --- /dev/null +++ b/contracts/libraries/AddressSet.sol @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: Unlicensed +pragma solidity ^0.8.16; + +// Based on: https://github.com/rob-Hitchens/UnorderedKeySet/blob/master/contracts/HitchensUnorderedAddressSet.sol + +library AddressSet { + struct Set { + mapping(address => uint256) keyPointers; + address[] keyList; + } + + function insert(Set storage self, address key) internal { + require(key != address(0), 'UnorderedKeySet(100) - Key cannot be 0x0'); + require( + !exists(self, key), + 'UnorderedAddressSet(101) - Address (key) already exists in the set.' + ); + self.keyList.push(key); + self.keyPointers[key] = self.keyList.length - 1; + } + + function upsert(Set storage self, address key) internal { + if (!exists(self, key)) { + insert(self, key); + } + } + + function remove(Set storage self, address key) internal { + require( + exists(self, key), + 'UnorderedKeySet(102) - Address (key) does not exist in the set.' + ); + address keyToMove = self.keyList[count(self) - 1]; + uint256 rowToReplace = self.keyPointers[key]; + self.keyPointers[keyToMove] = rowToReplace; + self.keyList[rowToReplace] = keyToMove; + delete self.keyPointers[key]; + self.keyList.pop(); + } + + function count(Set storage self) internal view returns (uint256) { + return (self.keyList.length); + } + + function exists(Set storage self, address key) + internal + view + returns (bool) + { + if (self.keyList.length == 0) return false; + return self.keyList[self.keyPointers[key]] == key; + } + + function keyAtIndex(Set storage self, uint256 index) + internal + view + returns (address) + { + return self.keyList[index]; + } +} diff --git a/deploy/0_GoldenProtocol.ts b/deploy/0_GoldenProtocol.ts new file mode 100644 index 00000000..3cc5aede --- /dev/null +++ b/deploy/0_GoldenProtocol.ts @@ -0,0 +1,20 @@ +import { HardhatRuntimeEnvironment } from 'hardhat/types'; +import { DeployFunction } from 'hardhat-deploy/types'; + +const deploy: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { + const { deployments, getNamedAccounts } = hre; + + const { deployer } = await getNamedAccounts(); + + await deployments.deploy('GoldenProtocol', { + from: deployer, + // skipIfAlreadyDeployed: true, + args: [3], + log: true, + }); +}; + +deploy.id = 'deploy_golden_protocol'; +deploy.tags = ['GoldenProtocol']; + +export default deploy; diff --git a/test/GoldenProtocol.ts b/test/GoldenProtocol.ts new file mode 100644 index 00000000..10267f03 --- /dev/null +++ b/test/GoldenProtocol.ts @@ -0,0 +1,103 @@ +import { expect } from 'chai'; +import { + deployments, + ethers, + getNamedAccounts, + getUnnamedAccounts, +} from 'hardhat'; + +import { setupUsers, setupUser, User, Contracts as _Contracts } from './utils'; +import getRandomBytesHexString from './utils/getRandomBytesHexString'; +import { + GoldenProtocol as GoldenProtocolContract, + GoldenProtocolQuestion as GoldenProtocolQuestionContract, +} from '../typechain/contracts/GoldenProtocol.sol'; + +type Contracts = Pick<_Contracts, 'GoldenProtocol'>; + +describe('GoldenProtocol', function () { + let GoldenProtocol: Contracts['GoldenProtocol']; + let owner: User; + let users: User[]; + + beforeEach(async function () { + await deployments.fixture(['GoldenProtocol']); + GoldenProtocol = await ethers.getContract( + 'GoldenProtocol' + ); + const contracts = { GoldenProtocol }; + const { deployer } = await getNamedAccounts(); + owner = await setupUser(deployer, contracts); + users = await setupUsers(await getUnnamedAccounts(), contracts); + }); + + describe('Deployment', function () { + it('Should have correct owner', async function () { + expect(await GoldenProtocol.owner()).to.equal(owner.address); + }); + }); + + describe('Protocol', function () { + it('asker can ask a question, answerer can answer, verifier can vote', async function () { + const subjectUUID = getRandomBytesHexString(16); + const predicateUUID = getRandomBytesHexString(16); + const bounty = 10; + const answer = 'Profound truth'; + + const asker = users[0]; + const answerer = users[1]; + const verifier = users[2]; + + // Ask question + const transactionQuestion = await asker.GoldenProtocol.createQuestion( + subjectUUID, + predicateUUID, + bounty + ); + const resultQuestion = await transactionQuestion.wait(); + expect(resultQuestion.status).to.equal(1); + + // Answer it + const questionAddresses = await answerer.GoldenProtocol.questions(); + console.log({ questionAddresses }); + const GoldenProtocolQuestionAnswerer = + await ethers.getContractAt( + 'GoldenProtocolQuestion', + questionAddresses[0], + answerer.address + ); + expect(await GoldenProtocolQuestionAnswerer.owner()).to.equal( + GoldenProtocol.address + ); + expect(await GoldenProtocolQuestionAnswerer.asker()).to.equal( + asker.address + ); + expect(await GoldenProtocolQuestionAnswerer.subjectUUID()).to.equal( + subjectUUID + ); + expect(await GoldenProtocolQuestionAnswerer.predicateUUID()).to.equal( + predicateUUID + ); + expect(await GoldenProtocolQuestionAnswerer.bounty()).to.equal(bounty); + const transactionAnswer = await GoldenProtocolQuestionAnswerer.addAnswer( + answer + ); + const resultAnswer = await transactionAnswer.wait(); + expect(resultAnswer.status).to.equal(1); + + // Verify it + const GoldenProtocolQuestionVerifier = + await ethers.getContractAt( + 'GoldenProtocolQuestion', + questionAddresses[0], + verifier.address + ); + expect(await GoldenProtocolQuestionVerifier.answers()).to.deep.equal([ + answer, + ]); + const transactionVote = await GoldenProtocolQuestionVerifier.upvote(0); + const resultVote = await transactionVote.wait(); + expect(resultVote.status).to.equal(1); + }); + }); +}); diff --git a/test/GoldenSchemaGovernor.ts b/test/GoldenSchemaGovernor.ts index 9ba42290..c1c260de 100644 --- a/test/GoldenSchemaGovernor.ts +++ b/test/GoldenSchemaGovernor.ts @@ -7,9 +7,14 @@ import { network, } from 'hardhat'; -import { setupUsers, setupUser, User, Contracts } from './utils'; +import { setupUsers, setupUser, User, Contracts as _Contracts } from './utils'; import getRandomBytesHexString from './utils/getRandomBytesHexString'; +type Contracts = Pick< + _Contracts, + 'GoldenSchema' | 'GoldenToken' | 'GoldenSchemaGovernor' +>; + describe('GoldenSchemaGovernor - ERC20 token', function () { let GoldenSchemaGovernor: Contracts['GoldenSchemaGovernor']; let GoldenSchema: Contracts['GoldenSchema']; @@ -22,7 +27,7 @@ describe('GoldenSchemaGovernor - ERC20 token', function () { GoldenSchemaGovernor = await ethers.getContract('GoldenSchemaGovernor'); GoldenSchema = await ethers.getContract('GoldenSchema'); GoldenToken = await ethers.getContract('GoldenToken'); - const contracts: Contracts = { + const contracts = { GoldenSchemaGovernor, GoldenSchema, GoldenToken, diff --git a/test/utils/index.ts b/test/utils/index.ts index f846c627..a5dd88d5 100644 --- a/test/utils/index.ts +++ b/test/utils/index.ts @@ -5,11 +5,13 @@ import { Address } from 'hardhat-deploy/types'; import type { GoldenSchemaGovernor } from '../../typechain/contracts/GoldenSchemaGovernor'; import type { GoldenSchema } from '../../typechain/contracts/GoldenSchema'; import type { GoldenToken } from '../../typechain/contracts/GoldenToken'; +import type { GoldenProtocol } from '../../typechain/contracts/GoldenProtocol.sol'; export type Contracts = { GoldenSchemaGovernor: GoldenSchemaGovernor; GoldenSchema: GoldenSchema; GoldenToken: GoldenToken; + GoldenProtocol: GoldenProtocol; }; export type User = { address: Address } & T; diff --git a/typechain/contracts/GoldenProtocol.sol/GoldenProtocol.ts b/typechain/contracts/GoldenProtocol.sol/GoldenProtocol.ts new file mode 100644 index 00000000..08ca7067 --- /dev/null +++ b/typechain/contracts/GoldenProtocol.sol/GoldenProtocol.ts @@ -0,0 +1,293 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, +} from "../../common"; + +export interface GoldenProtocolInterface extends utils.Interface { + functions: { + "createQuestion(bytes16,bytes16,uint256)": FunctionFragment; + "minimumVotes()": FunctionFragment; + "owner()": FunctionFragment; + "questions()": FunctionFragment; + "renounceOwnership()": FunctionFragment; + "setMinimumVotes(uint256)": FunctionFragment; + "transferOwnership(address)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "createQuestion" + | "minimumVotes" + | "owner" + | "questions" + | "renounceOwnership" + | "setMinimumVotes" + | "transferOwnership" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "createQuestion", + values: [BytesLike, BytesLike, BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "minimumVotes", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData(functionFragment: "questions", values?: undefined): string; + encodeFunctionData( + functionFragment: "renounceOwnership", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "setMinimumVotes", + values: [BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "transferOwnership", + values: [string] + ): string; + + decodeFunctionResult( + functionFragment: "createQuestion", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "minimumVotes", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "questions", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "renounceOwnership", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "setMinimumVotes", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "transferOwnership", + data: BytesLike + ): Result; + + events: { + "OwnershipTransferred(address,address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; +} + +export interface OwnershipTransferredEventObject { + previousOwner: string; + newOwner: string; +} +export type OwnershipTransferredEvent = TypedEvent< + [string, string], + OwnershipTransferredEventObject +>; + +export type OwnershipTransferredEventFilter = + TypedEventFilter; + +export interface GoldenProtocol extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: GoldenProtocolInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + createQuestion( + subjectUUID: BytesLike, + predicateUUID: BytesLike, + bounty: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + minimumVotes(overrides?: CallOverrides): Promise<[BigNumber]>; + + owner(overrides?: CallOverrides): Promise<[string]>; + + questions(overrides?: CallOverrides): Promise<[string[]]>; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + setMinimumVotes( + _minimumVotes: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + createQuestion( + subjectUUID: BytesLike, + predicateUUID: BytesLike, + bounty: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + minimumVotes(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + questions(overrides?: CallOverrides): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + setMinimumVotes( + _minimumVotes: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + callStatic: { + createQuestion( + subjectUUID: BytesLike, + predicateUUID: BytesLike, + bounty: BigNumberish, + overrides?: CallOverrides + ): Promise; + + minimumVotes(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + questions(overrides?: CallOverrides): Promise; + + renounceOwnership(overrides?: CallOverrides): Promise; + + setMinimumVotes( + _minimumVotes: BigNumberish, + overrides?: CallOverrides + ): Promise; + + transferOwnership( + newOwner: string, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "OwnershipTransferred(address,address)"( + previousOwner?: string | null, + newOwner?: string | null + ): OwnershipTransferredEventFilter; + OwnershipTransferred( + previousOwner?: string | null, + newOwner?: string | null + ): OwnershipTransferredEventFilter; + }; + + estimateGas: { + createQuestion( + subjectUUID: BytesLike, + predicateUUID: BytesLike, + bounty: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + minimumVotes(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + questions(overrides?: CallOverrides): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + setMinimumVotes( + _minimumVotes: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + populateTransaction: { + createQuestion( + subjectUUID: BytesLike, + predicateUUID: BytesLike, + bounty: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + minimumVotes(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + questions(overrides?: CallOverrides): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + setMinimumVotes( + _minimumVotes: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; +} diff --git a/typechain/contracts/GoldenProtocol.sol/GoldenProtocolQuestion.ts b/typechain/contracts/GoldenProtocol.sol/GoldenProtocolQuestion.ts new file mode 100644 index 00000000..ec295085 --- /dev/null +++ b/typechain/contracts/GoldenProtocol.sol/GoldenProtocolQuestion.ts @@ -0,0 +1,345 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, +} from "../../common"; + +export declare namespace GoldenProtocolQuestion { + export type AnswerStruct = { + answerer: string; + answer: string; + voteCount: BigNumberish; + }; + + export type AnswerStructOutput = [string, string, BigNumber] & { + answerer: string; + answer: string; + voteCount: BigNumber; + }; +} + +export interface GoldenProtocolQuestionInterface extends utils.Interface { + functions: { + "addAnswer(string)": FunctionFragment; + "answer()": FunctionFragment; + "answers()": FunctionFragment; + "asker()": FunctionFragment; + "bounty()": FunctionFragment; + "hashAnswer(address,string)": FunctionFragment; + "owner()": FunctionFragment; + "payout()": FunctionFragment; + "predicateUUID()": FunctionFragment; + "subjectUUID()": FunctionFragment; + "topAnswer()": FunctionFragment; + "upvote(uint256)": FunctionFragment; + "votes()": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "addAnswer" + | "answer" + | "answers" + | "asker" + | "bounty" + | "hashAnswer" + | "owner" + | "payout" + | "predicateUUID" + | "subjectUUID" + | "topAnswer" + | "upvote" + | "votes" + ): FunctionFragment; + + encodeFunctionData(functionFragment: "addAnswer", values: [string]): string; + encodeFunctionData(functionFragment: "answer", values?: undefined): string; + encodeFunctionData(functionFragment: "answers", values?: undefined): string; + encodeFunctionData(functionFragment: "asker", values?: undefined): string; + encodeFunctionData(functionFragment: "bounty", values?: undefined): string; + encodeFunctionData( + functionFragment: "hashAnswer", + values: [string, string] + ): string; + encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData(functionFragment: "payout", values?: undefined): string; + encodeFunctionData( + functionFragment: "predicateUUID", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "subjectUUID", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "topAnswer", values?: undefined): string; + encodeFunctionData( + functionFragment: "upvote", + values: [BigNumberish] + ): string; + encodeFunctionData(functionFragment: "votes", values?: undefined): string; + + decodeFunctionResult(functionFragment: "addAnswer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "answer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "answers", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "asker", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "bounty", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "hashAnswer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "payout", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "predicateUUID", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "subjectUUID", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "topAnswer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "upvote", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "votes", data: BytesLike): Result; + + events: {}; +} + +export interface GoldenProtocolQuestion extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: GoldenProtocolQuestionInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + addAnswer( + _answer: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + answer(overrides?: CallOverrides): Promise<[string]>; + + answers(overrides?: CallOverrides): Promise<[string[]]>; + + asker(overrides?: CallOverrides): Promise<[string]>; + + bounty(overrides?: CallOverrides): Promise<[BigNumber]>; + + hashAnswer( + answerer: string, + value: string, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + owner(overrides?: CallOverrides): Promise<[string]>; + + payout( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + predicateUUID(overrides?: CallOverrides): Promise<[string]>; + + subjectUUID(overrides?: CallOverrides): Promise<[string]>; + + topAnswer( + overrides?: CallOverrides + ): Promise<[GoldenProtocolQuestion.AnswerStructOutput]>; + + upvote( + index: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + votes(overrides?: CallOverrides): Promise<[BigNumber[]]>; + }; + + addAnswer( + _answer: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + answer(overrides?: CallOverrides): Promise; + + answers(overrides?: CallOverrides): Promise; + + asker(overrides?: CallOverrides): Promise; + + bounty(overrides?: CallOverrides): Promise; + + hashAnswer( + answerer: string, + value: string, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + payout( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + predicateUUID(overrides?: CallOverrides): Promise; + + subjectUUID(overrides?: CallOverrides): Promise; + + topAnswer( + overrides?: CallOverrides + ): Promise; + + upvote( + index: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + votes(overrides?: CallOverrides): Promise; + + callStatic: { + addAnswer(_answer: string, overrides?: CallOverrides): Promise; + + answer(overrides?: CallOverrides): Promise; + + answers(overrides?: CallOverrides): Promise; + + asker(overrides?: CallOverrides): Promise; + + bounty(overrides?: CallOverrides): Promise; + + hashAnswer( + answerer: string, + value: string, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + payout(overrides?: CallOverrides): Promise; + + predicateUUID(overrides?: CallOverrides): Promise; + + subjectUUID(overrides?: CallOverrides): Promise; + + topAnswer( + overrides?: CallOverrides + ): Promise; + + upvote(index: BigNumberish, overrides?: CallOverrides): Promise; + + votes(overrides?: CallOverrides): Promise; + }; + + filters: {}; + + estimateGas: { + addAnswer( + _answer: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + answer(overrides?: CallOverrides): Promise; + + answers(overrides?: CallOverrides): Promise; + + asker(overrides?: CallOverrides): Promise; + + bounty(overrides?: CallOverrides): Promise; + + hashAnswer( + answerer: string, + value: string, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + payout( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + predicateUUID(overrides?: CallOverrides): Promise; + + subjectUUID(overrides?: CallOverrides): Promise; + + topAnswer(overrides?: CallOverrides): Promise; + + upvote( + index: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + votes(overrides?: CallOverrides): Promise; + }; + + populateTransaction: { + addAnswer( + _answer: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + answer(overrides?: CallOverrides): Promise; + + answers(overrides?: CallOverrides): Promise; + + asker(overrides?: CallOverrides): Promise; + + bounty(overrides?: CallOverrides): Promise; + + hashAnswer( + answerer: string, + value: string, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + payout( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + predicateUUID(overrides?: CallOverrides): Promise; + + subjectUUID(overrides?: CallOverrides): Promise; + + topAnswer(overrides?: CallOverrides): Promise; + + upvote( + index: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + votes(overrides?: CallOverrides): Promise; + }; +} diff --git a/typechain/contracts/GoldenProtocol.sol/Question.ts b/typechain/contracts/GoldenProtocol.sol/Question.ts new file mode 100644 index 00000000..8b4370a5 --- /dev/null +++ b/typechain/contracts/GoldenProtocol.sol/Question.ts @@ -0,0 +1,245 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, +} from "../../common"; + +export declare namespace Question { + export type AnswerStruct = { + answerer: string; + answer: string; + voteCount: BigNumberish; + }; + + export type AnswerStructOutput = [string, string, BigNumber] & { + answerer: string; + answer: string; + voteCount: BigNumber; + }; +} + +export interface QuestionInterface extends utils.Interface { + functions: { + "addAnswer(string)": FunctionFragment; + "answers()": FunctionFragment; + "hashAnswer(address,string)": FunctionFragment; + "payout()": FunctionFragment; + "topAnswer()": FunctionFragment; + "upvote(uint256)": FunctionFragment; + "votes()": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "addAnswer" + | "answers" + | "hashAnswer" + | "payout" + | "topAnswer" + | "upvote" + | "votes" + ): FunctionFragment; + + encodeFunctionData(functionFragment: "addAnswer", values: [string]): string; + encodeFunctionData(functionFragment: "answers", values?: undefined): string; + encodeFunctionData( + functionFragment: "hashAnswer", + values: [string, string] + ): string; + encodeFunctionData(functionFragment: "payout", values?: undefined): string; + encodeFunctionData(functionFragment: "topAnswer", values?: undefined): string; + encodeFunctionData( + functionFragment: "upvote", + values: [BigNumberish] + ): string; + encodeFunctionData(functionFragment: "votes", values?: undefined): string; + + decodeFunctionResult(functionFragment: "addAnswer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "answers", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "hashAnswer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "payout", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "topAnswer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "upvote", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "votes", data: BytesLike): Result; + + events: {}; +} + +export interface Question extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: QuestionInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + addAnswer( + _answer: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + answers(overrides?: CallOverrides): Promise<[string[]]>; + + hashAnswer( + answerer: string, + value: string, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + payout( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + topAnswer( + overrides?: CallOverrides + ): Promise<[Question.AnswerStructOutput]>; + + upvote( + index: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + votes(overrides?: CallOverrides): Promise<[BigNumber[]]>; + }; + + addAnswer( + _answer: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + answers(overrides?: CallOverrides): Promise; + + hashAnswer( + answerer: string, + value: string, + overrides?: CallOverrides + ): Promise; + + payout( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + topAnswer(overrides?: CallOverrides): Promise; + + upvote( + index: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + votes(overrides?: CallOverrides): Promise; + + callStatic: { + addAnswer(_answer: string, overrides?: CallOverrides): Promise; + + answers(overrides?: CallOverrides): Promise; + + hashAnswer( + answerer: string, + value: string, + overrides?: CallOverrides + ): Promise; + + payout(overrides?: CallOverrides): Promise; + + topAnswer(overrides?: CallOverrides): Promise; + + upvote(index: BigNumberish, overrides?: CallOverrides): Promise; + + votes(overrides?: CallOverrides): Promise; + }; + + filters: {}; + + estimateGas: { + addAnswer( + _answer: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + answers(overrides?: CallOverrides): Promise; + + hashAnswer( + answerer: string, + value: string, + overrides?: CallOverrides + ): Promise; + + payout( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + topAnswer(overrides?: CallOverrides): Promise; + + upvote( + index: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + votes(overrides?: CallOverrides): Promise; + }; + + populateTransaction: { + addAnswer( + _answer: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + answers(overrides?: CallOverrides): Promise; + + hashAnswer( + answerer: string, + value: string, + overrides?: CallOverrides + ): Promise; + + payout( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + topAnswer(overrides?: CallOverrides): Promise; + + upvote( + index: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + votes(overrides?: CallOverrides): Promise; + }; +} diff --git a/typechain/contracts/GoldenProtocol.sol/index.ts b/typechain/contracts/GoldenProtocol.sol/index.ts new file mode 100644 index 00000000..6b5927a5 --- /dev/null +++ b/typechain/contracts/GoldenProtocol.sol/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { GoldenProtocol } from "./GoldenProtocol"; +export type { GoldenProtocolQuestion } from "./GoldenProtocolQuestion"; diff --git a/typechain/contracts/index.ts b/typechain/contracts/index.ts index 96b4ce5c..b98f7957 100644 --- a/typechain/contracts/index.ts +++ b/typechain/contracts/index.ts @@ -1,6 +1,8 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ +import type * as goldenProtocolSol from "./GoldenProtocol.sol"; +export type { goldenProtocolSol }; import type * as nft from "./nft"; export type { nft }; export type { GoldenSchema } from "./GoldenSchema"; diff --git a/typechain/factories/contracts/GoldenProtocol.sol/GoldenProtocolQuestion__factory.ts b/typechain/factories/contracts/GoldenProtocol.sol/GoldenProtocolQuestion__factory.ts new file mode 100644 index 00000000..c26d5e1b --- /dev/null +++ b/typechain/factories/contracts/GoldenProtocol.sol/GoldenProtocolQuestion__factory.ts @@ -0,0 +1,320 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { + Signer, + utils, + Contract, + ContractFactory, + BytesLike, + BigNumberish, + Overrides, +} from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { + GoldenProtocolQuestion, + GoldenProtocolQuestionInterface, +} from "../../../contracts/GoldenProtocol.sol/GoldenProtocolQuestion"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "_owner", + type: "address", + }, + { + internalType: "address", + name: "_asker", + type: "address", + }, + { + internalType: "bytes16", + name: "_subjectUUID", + type: "bytes16", + }, + { + internalType: "bytes16", + name: "_predicateUUID", + type: "bytes16", + }, + { + internalType: "uint256", + name: "_bounty", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [ + { + internalType: "string", + name: "_answer", + type: "string", + }, + ], + name: "addAnswer", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "answer", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "answers", + outputs: [ + { + internalType: "string[]", + name: "", + type: "string[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "asker", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "bounty", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "answerer", + type: "address", + }, + { + internalType: "string", + name: "value", + type: "string", + }, + ], + name: "hashAnswer", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "payout", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "predicateUUID", + outputs: [ + { + internalType: "bytes16", + name: "", + type: "bytes16", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "subjectUUID", + outputs: [ + { + internalType: "bytes16", + name: "", + type: "bytes16", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "topAnswer", + outputs: [ + { + components: [ + { + internalType: "address", + name: "answerer", + type: "address", + }, + { + internalType: "string", + name: "answer", + type: "string", + }, + { + internalType: "uint256", + name: "voteCount", + type: "uint256", + }, + ], + internalType: "struct GoldenProtocolQuestion.Answer", + name: "", + type: "tuple", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "index", + type: "uint256", + }, + ], + name: "upvote", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "votes", + outputs: [ + { + internalType: "uint256[]", + name: "", + type: "uint256[]", + }, + ], + stateMutability: "view", + type: "function", + }, +]; + +const _bytecode = + "0x608060405234801561001057600080fd5b506040516200110638038062001106833981016040819052610031916100b1565b600080546001600160a01b039687166001600160a01b0319918216179091556001805495909616941693909317909355608092831c600160801b02921c9190911760035560025561010f565b80516001600160a01b038116811461009457600080fd5b919050565b80516001600160801b03198116811461009457600080fd5b600080600080600060a086880312156100c957600080fd5b6100d28661007d565b94506100e06020870161007d565b93506100ee60408701610099565b92506100fc60608701610099565b9150608086015190509295509295909350565b610fe7806200011f6000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c806388fae0e91161008c578063bbe0ba8511610066578063bbe0ba85146101b7578063c7a66eb3146101cb578063e1145e4b146101de578063e168c3ec146101f357600080fd5b806388fae0e91461016e5780638da5cb5b14610183578063943dfef1146101ae57600080fd5b806301ddf070146100d4578063366b2baa146100e957806363bd1d4a1461010f5780637a2faee01461011757806385bb7d691461014657806388775d8f1461015b575b600080fd5b6100e76100e2366004610b03565b610208565b005b6100fc6100f7366004610b32565b6102ef565b6040519081526020015b60405180910390f35b6100e7610326565b6003546101249060801b81565b6040516fffffffffffffffffffffffffffffffff199091168152602001610106565b61014e6104b4565b6040516101069190610c48565b6100e7610169366004610c62565b610542565b610176610584565b6040516101069190610cd4565b600054610196906001600160a01b031681565b6040516001600160a01b039091168152602001610106565b6100fc60025481565b60035461012490600160801b900460801b81565b600154610196906001600160a01b031681565b6101e66106fe565b6040516101069190610d18565b6101fb610850565b6040516101069190610d7a565b60065481106102845760405162461bcd60e51b815260206004820152603860248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a20746865726520697360448201527f206e6f20616e73776572206174207468617420696e646578000000000000000060648201526084015b60405180910390fd5b6000610291600583610909565b6001600160a01b0381166000908152600b6020526040812080549293503392600192906102bf908490610dd4565b90915550506001600160a01b0381166000908152600a602052604090208390556102ea60078261093c565b505050565b60008282604051602001610304929190610de7565b6040516020818303038152906040528051906020012060001c90505b92915050565b6001546001600160a01b0316331461038a5760405162461bcd60e51b815260206004820152602160248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a206f6e6c7941736b656044820152603960f91b606482015260840161027b565b6000610394610584565b6000546040808301518151631901f83560e21b815291519394506001600160a01b03909216928391636407e0d49160048083019260209291908290030181865afa1580156103e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040a9190610e13565b11156104755760405162461bcd60e51b815260206004820152603460248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a207061796f75743a206044820152731b5a5b9a5b5d5b559bdd195cc81b9bdd081b595d60621b606482015260840161027b565b81516002546040516001600160a01b0383169180156108fc02916000818181858888f193505050501580156104ae573d6000803e3d6000fd5b50505050565b600480546104c190610e2c565b80601f01602080910402602001604051908101604052809291908181526020018280546104ed90610e2c565b801561053a5780601f1061050f5761010080835404028352916020019161053a565b820191906000526020600020905b81548152906001019060200180831161051d57829003601f168201915b505050505081565b33600081815260096020526040902061055c838583610eae565b5061056860058261093c565b6001600160a01b03166000908152600b60205260408120555050565b6105b1604051806060016040528060006001600160a01b0316815260200160608152602001600081525090565b60008060005b600654811015610615576000600b816105d1600585610909565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050838110610602578093508192505b508061060d81610f6f565b9150506105b7565b506000610623600583610909565b90506040518060600160405280826001600160a01b0316815260200160096000846001600160a01b03166001600160a01b03168152602001908152602001600020805461066f90610e2c565b80601f016020809104026020016040519081016040528092919081815260200182805461069b90610e2c565b80156106e85780601f106106bd576101008083540402835291602001916106e8565b820191906000526020600020905b8154815290600101906020018083116106cb57829003601f168201915b5050505050815260200184815250935050505090565b60065460609060009067ffffffffffffffff81111561071f5761071f610b1c565b60405190808252806020026020018201604052801561075257816020015b606081526020019060019003908161073d5790505b50905060005b60065481101561084a5760096000610771600584610909565b6001600160a01b03166001600160a01b03168152602001908152602001600020805461079c90610e2c565b80601f01602080910402602001604051908101604052809291908181526020018280546107c890610e2c565b80156108155780601f106107ea57610100808354040283529160200191610815565b820191906000526020600020905b8154815290600101906020018083116107f857829003601f168201915b505050505082828151811061082c5761082c610f88565b6020026020010181905250808061084290610f6f565b915050610758565b50919050565b60065460609060009067ffffffffffffffff81111561087157610871610b1c565b60405190808252806020026020018201604052801561089a578160200160208202803683370190505b50905060005b60065481101561084a57600b60006108b9600584610909565b6001600160a01b03166001600160a01b03168152602001908152602001600020548282815181106108ec576108ec610f88565b60209081029190910101528061090181610f6f565b9150506108a0565b600082600101828154811061092057610920610f88565b6000918252602090912001546001600160a01b03169392505050565b6109468282610958565b6109545761095482826109bb565b5050565b6001820154600090810361096e57506000610320565b6001600160a01b038216600081815260208590526040902054600185018054909190811061099e5761099e610f88565b6000918252602090912001546001600160a01b0316149392505050565b6001600160a01b038116610a225760405162461bcd60e51b815260206004820152602860248201527f556e6f7264657265644b65795365742831303029202d204b65792063616e6e6f604482015267074206265203078360c41b606482015260840161027b565b610a2c8282610958565b15610aab5760405162461bcd60e51b815260206004820152604360248201527f556e6f726465726564416464726573735365742831303129202d20416464726560448201527f737320286b65792920616c72656164792065786973747320696e20746865207360648201526232ba1760e91b608482015260a40161027b565b6001828101805480830182556000828152602090200180546001600160a01b0319166001600160a01b03851617905554610ae59190610f9e565b6001600160a01b039091166000908152602092909252604090912055565b600060208284031215610b1557600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610b4557600080fd5b82356001600160a01b0381168114610b5c57600080fd5b9150602083013567ffffffffffffffff80821115610b7957600080fd5b818501915085601f830112610b8d57600080fd5b813581811115610b9f57610b9f610b1c565b604051601f8201601f19908116603f01168101908382118183101715610bc757610bc7610b1c565b81604052828152886020848701011115610be057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000815180845260005b81811015610c2857602081850181015186830182015201610c0c565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610c5b6020830184610c02565b9392505050565b60008060208385031215610c7557600080fd5b823567ffffffffffffffff80821115610c8d57600080fd5b818501915085601f830112610ca157600080fd5b813581811115610cb057600080fd5b866020828501011115610cc257600080fd5b60209290920196919550909350505050565b602080825282516001600160a01b03168282015282015160606040830152600090610d026080840182610c02565b9050604084015160608401528091505092915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015610d6d57603f19888603018452610d5b858351610c02565b94509285019290850190600101610d3f565b5092979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015610db257835183529284019291840191600101610d96565b50909695505050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561032057610320610dbe565b6001600160a01b0383168152604060208201819052600090610e0b90830184610c02565b949350505050565b600060208284031215610e2557600080fd5b5051919050565b600181811c90821680610e4057607f821691505b60208210810361084a57634e487b7160e01b600052602260045260246000fd5b601f8211156102ea57600081815260208120601f850160051c81016020861015610e875750805b601f850160051c820191505b81811015610ea657828155600101610e93565b505050505050565b67ffffffffffffffff831115610ec657610ec6610b1c565b610eda83610ed48354610e2c565b83610e60565b6000601f841160018114610f0e5760008515610ef65750838201355b600019600387901b1c1916600186901b178355610f68565b600083815260209020601f19861690835b82811015610f3f5786850135825560209485019460019092019101610f1f565b5086821015610f5c5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b600060018201610f8157610f81610dbe565b5060010190565b634e487b7160e01b600052603260045260246000fd5b8181038181111561032057610320610dbe56fea26469706673582212200b2068918e463536645476419e8a6876e0ccd17cd7b90a02860f03af20c8c0c864736f6c63430008100033"; + +type GoldenProtocolQuestionConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: GoldenProtocolQuestionConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class GoldenProtocolQuestion__factory extends ContractFactory { + constructor(...args: GoldenProtocolQuestionConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + _owner: string, + _asker: string, + _subjectUUID: BytesLike, + _predicateUUID: BytesLike, + _bounty: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise { + return super.deploy( + _owner, + _asker, + _subjectUUID, + _predicateUUID, + _bounty, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + _owner: string, + _asker: string, + _subjectUUID: BytesLike, + _predicateUUID: BytesLike, + _bounty: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): TransactionRequest { + return super.getDeployTransaction( + _owner, + _asker, + _subjectUUID, + _predicateUUID, + _bounty, + overrides || {} + ); + } + override attach(address: string): GoldenProtocolQuestion { + return super.attach(address) as GoldenProtocolQuestion; + } + override connect(signer: Signer): GoldenProtocolQuestion__factory { + return super.connect(signer) as GoldenProtocolQuestion__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): GoldenProtocolQuestionInterface { + return new utils.Interface(_abi) as GoldenProtocolQuestionInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): GoldenProtocolQuestion { + return new Contract( + address, + _abi, + signerOrProvider + ) as GoldenProtocolQuestion; + } +} diff --git a/typechain/factories/contracts/GoldenProtocol.sol/GoldenProtocol__factory.ts b/typechain/factories/contracts/GoldenProtocol.sol/GoldenProtocol__factory.ts new file mode 100644 index 00000000..e4b35fe9 --- /dev/null +++ b/typechain/factories/contracts/GoldenProtocol.sol/GoldenProtocol__factory.ts @@ -0,0 +1,205 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { + Signer, + utils, + Contract, + ContractFactory, + BigNumberish, + Overrides, +} from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { + GoldenProtocol, + GoldenProtocolInterface, +} from "../../../contracts/GoldenProtocol.sol/GoldenProtocol"; + +const _abi = [ + { + inputs: [ + { + internalType: "uint256", + name: "_minimumVotes", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + inputs: [ + { + internalType: "bytes16", + name: "subjectUUID", + type: "bytes16", + }, + { + internalType: "bytes16", + name: "predicateUUID", + type: "bytes16", + }, + { + internalType: "uint256", + name: "bounty", + type: "uint256", + }, + ], + name: "createQuestion", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "minimumVotes", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "questions", + outputs: [ + { + internalType: "address[]", + name: "", + type: "address[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "_minimumVotes", + type: "uint256", + }, + ], + name: "setMinimumVotes", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +]; + +const _bytecode = + "0x608060405234801561001057600080fd5b5060405161181938038061181983398101604081905261002f91610090565b61003833610040565b6004556100a9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100a257600080fd5b5051919050565b611761806100b86000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100bd5780639902b633146100e2578063d6fbfb24146100f5578063f2fde38b1461010857600080fd5b80636407e0d414610082578063715018a61461009e57806377a49821146100a8575b600080fd5b61008b60045481565b6040519081526020015b60405180910390f35b6100a661011b565b005b6100b061012f565b60405161009591906104ff565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610095565b6100a66100f036600461054c565b610193565b6100ca610103366004610582565b6101a0565b6100a66101163660046105be565b61021d565b61012361029b565b61012d60006102f5565b565b60606001800180548060200260200160405190810160405280929190818152602001828054801561018957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161016b575b5050505050905090565b61019b61029b565b600455565b60008030338686866040516101b4906104f2565b6001600160a01b0395861681529490931660208501526001600160801b03199182166040850152166060830152608082015260a001604051809103906000f080158015610205573d6000803e3d6000fd5b50905080610214600182610345565b95945050505050565b61022561029b565b6001600160a01b03811661028f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b610298816102f5565b50565b6000546001600160a01b0316331461012d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610286565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381166103ac5760405162461bcd60e51b815260206004820152602860248201527f556e6f7264657265644b65795365742831303029202d204b65792063616e6e6f604482015267074206265203078360c41b6064820152608401610286565b6103b6828261048d565b156104355760405162461bcd60e51b815260206004820152604360248201527f556e6f726465726564416464726573735365742831303129202d20416464726560448201527f737320286b65792920616c72656164792065786973747320696e20746865207360648201526232ba1760e91b608482015260a401610286565b6001828101805480830182556000828152602090200180546001600160a01b0319166001600160a01b0385161790555461046f91906105ee565b6001600160a01b039091166000908152602092909252604090912055565b600182015460009081036104a3575060006104ec565b6001600160a01b03821660008181526020859052604090205460018501805490919081106104d3576104d361060f565b6000918252602090912001546001600160a01b03161490505b92915050565b6111068061062683390190565b6020808252825182820181905260009190848201906040850190845b818110156105405783516001600160a01b03168352928401929184019160010161051b565b50909695505050505050565b60006020828403121561055e57600080fd5b5035919050565b80356001600160801b03198116811461057d57600080fd5b919050565b60008060006060848603121561059757600080fd5b6105a084610565565b92506105ae60208501610565565b9150604084013590509250925092565b6000602082840312156105d057600080fd5b81356001600160a01b03811681146105e757600080fd5b9392505050565b818103818111156104ec57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fdfe608060405234801561001057600080fd5b506040516200110638038062001106833981016040819052610031916100b1565b600080546001600160a01b039687166001600160a01b0319918216179091556001805495909616941693909317909355608092831c600160801b02921c9190911760035560025561010f565b80516001600160a01b038116811461009457600080fd5b919050565b80516001600160801b03198116811461009457600080fd5b600080600080600060a086880312156100c957600080fd5b6100d28661007d565b94506100e06020870161007d565b93506100ee60408701610099565b92506100fc60608701610099565b9150608086015190509295509295909350565b610fe7806200011f6000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c806388fae0e91161008c578063bbe0ba8511610066578063bbe0ba85146101b7578063c7a66eb3146101cb578063e1145e4b146101de578063e168c3ec146101f357600080fd5b806388fae0e91461016e5780638da5cb5b14610183578063943dfef1146101ae57600080fd5b806301ddf070146100d4578063366b2baa146100e957806363bd1d4a1461010f5780637a2faee01461011757806385bb7d691461014657806388775d8f1461015b575b600080fd5b6100e76100e2366004610b03565b610208565b005b6100fc6100f7366004610b32565b6102ef565b6040519081526020015b60405180910390f35b6100e7610326565b6003546101249060801b81565b6040516fffffffffffffffffffffffffffffffff199091168152602001610106565b61014e6104b4565b6040516101069190610c48565b6100e7610169366004610c62565b610542565b610176610584565b6040516101069190610cd4565b600054610196906001600160a01b031681565b6040516001600160a01b039091168152602001610106565b6100fc60025481565b60035461012490600160801b900460801b81565b600154610196906001600160a01b031681565b6101e66106fe565b6040516101069190610d18565b6101fb610850565b6040516101069190610d7a565b60065481106102845760405162461bcd60e51b815260206004820152603860248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a20746865726520697360448201527f206e6f20616e73776572206174207468617420696e646578000000000000000060648201526084015b60405180910390fd5b6000610291600583610909565b6001600160a01b0381166000908152600b6020526040812080549293503392600192906102bf908490610dd4565b90915550506001600160a01b0381166000908152600a602052604090208390556102ea60078261093c565b505050565b60008282604051602001610304929190610de7565b6040516020818303038152906040528051906020012060001c90505b92915050565b6001546001600160a01b0316331461038a5760405162461bcd60e51b815260206004820152602160248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a206f6e6c7941736b656044820152603960f91b606482015260840161027b565b6000610394610584565b6000546040808301518151631901f83560e21b815291519394506001600160a01b03909216928391636407e0d49160048083019260209291908290030181865afa1580156103e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040a9190610e13565b11156104755760405162461bcd60e51b815260206004820152603460248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a207061796f75743a206044820152731b5a5b9a5b5d5b559bdd195cc81b9bdd081b595d60621b606482015260840161027b565b81516002546040516001600160a01b0383169180156108fc02916000818181858888f193505050501580156104ae573d6000803e3d6000fd5b50505050565b600480546104c190610e2c565b80601f01602080910402602001604051908101604052809291908181526020018280546104ed90610e2c565b801561053a5780601f1061050f5761010080835404028352916020019161053a565b820191906000526020600020905b81548152906001019060200180831161051d57829003601f168201915b505050505081565b33600081815260096020526040902061055c838583610eae565b5061056860058261093c565b6001600160a01b03166000908152600b60205260408120555050565b6105b1604051806060016040528060006001600160a01b0316815260200160608152602001600081525090565b60008060005b600654811015610615576000600b816105d1600585610909565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050838110610602578093508192505b508061060d81610f6f565b9150506105b7565b506000610623600583610909565b90506040518060600160405280826001600160a01b0316815260200160096000846001600160a01b03166001600160a01b03168152602001908152602001600020805461066f90610e2c565b80601f016020809104026020016040519081016040528092919081815260200182805461069b90610e2c565b80156106e85780601f106106bd576101008083540402835291602001916106e8565b820191906000526020600020905b8154815290600101906020018083116106cb57829003601f168201915b5050505050815260200184815250935050505090565b60065460609060009067ffffffffffffffff81111561071f5761071f610b1c565b60405190808252806020026020018201604052801561075257816020015b606081526020019060019003908161073d5790505b50905060005b60065481101561084a5760096000610771600584610909565b6001600160a01b03166001600160a01b03168152602001908152602001600020805461079c90610e2c565b80601f01602080910402602001604051908101604052809291908181526020018280546107c890610e2c565b80156108155780601f106107ea57610100808354040283529160200191610815565b820191906000526020600020905b8154815290600101906020018083116107f857829003601f168201915b505050505082828151811061082c5761082c610f88565b6020026020010181905250808061084290610f6f565b915050610758565b50919050565b60065460609060009067ffffffffffffffff81111561087157610871610b1c565b60405190808252806020026020018201604052801561089a578160200160208202803683370190505b50905060005b60065481101561084a57600b60006108b9600584610909565b6001600160a01b03166001600160a01b03168152602001908152602001600020548282815181106108ec576108ec610f88565b60209081029190910101528061090181610f6f565b9150506108a0565b600082600101828154811061092057610920610f88565b6000918252602090912001546001600160a01b03169392505050565b6109468282610958565b6109545761095482826109bb565b5050565b6001820154600090810361096e57506000610320565b6001600160a01b038216600081815260208590526040902054600185018054909190811061099e5761099e610f88565b6000918252602090912001546001600160a01b0316149392505050565b6001600160a01b038116610a225760405162461bcd60e51b815260206004820152602860248201527f556e6f7264657265644b65795365742831303029202d204b65792063616e6e6f604482015267074206265203078360c41b606482015260840161027b565b610a2c8282610958565b15610aab5760405162461bcd60e51b815260206004820152604360248201527f556e6f726465726564416464726573735365742831303129202d20416464726560448201527f737320286b65792920616c72656164792065786973747320696e20746865207360648201526232ba1760e91b608482015260a40161027b565b6001828101805480830182556000828152602090200180546001600160a01b0319166001600160a01b03851617905554610ae59190610f9e565b6001600160a01b039091166000908152602092909252604090912055565b600060208284031215610b1557600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610b4557600080fd5b82356001600160a01b0381168114610b5c57600080fd5b9150602083013567ffffffffffffffff80821115610b7957600080fd5b818501915085601f830112610b8d57600080fd5b813581811115610b9f57610b9f610b1c565b604051601f8201601f19908116603f01168101908382118183101715610bc757610bc7610b1c565b81604052828152886020848701011115610be057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000815180845260005b81811015610c2857602081850181015186830182015201610c0c565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610c5b6020830184610c02565b9392505050565b60008060208385031215610c7557600080fd5b823567ffffffffffffffff80821115610c8d57600080fd5b818501915085601f830112610ca157600080fd5b813581811115610cb057600080fd5b866020828501011115610cc257600080fd5b60209290920196919550909350505050565b602080825282516001600160a01b03168282015282015160606040830152600090610d026080840182610c02565b9050604084015160608401528091505092915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015610d6d57603f19888603018452610d5b858351610c02565b94509285019290850190600101610d3f565b5092979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015610db257835183529284019291840191600101610d96565b50909695505050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561032057610320610dbe565b6001600160a01b0383168152604060208201819052600090610e0b90830184610c02565b949350505050565b600060208284031215610e2557600080fd5b5051919050565b600181811c90821680610e4057607f821691505b60208210810361084a57634e487b7160e01b600052602260045260246000fd5b601f8211156102ea57600081815260208120601f850160051c81016020861015610e875750805b601f850160051c820191505b81811015610ea657828155600101610e93565b505050505050565b67ffffffffffffffff831115610ec657610ec6610b1c565b610eda83610ed48354610e2c565b83610e60565b6000601f841160018114610f0e5760008515610ef65750838201355b600019600387901b1c1916600186901b178355610f68565b600083815260209020601f19861690835b82811015610f3f5786850135825560209485019460019092019101610f1f565b5086821015610f5c5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b600060018201610f8157610f81610dbe565b5060010190565b634e487b7160e01b600052603260045260246000fd5b8181038181111561032057610320610dbe56fea26469706673582212200b2068918e463536645476419e8a6876e0ccd17cd7b90a02860f03af20c8c0c864736f6c63430008100033a264697066735822122094e937df5c35e55520283d8808f4fa4a0866c146129b2e0869c2f84eb801edf864736f6c63430008100033"; + +type GoldenProtocolConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: GoldenProtocolConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class GoldenProtocol__factory extends ContractFactory { + constructor(...args: GoldenProtocolConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + _minimumVotes: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise { + return super.deploy( + _minimumVotes, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + _minimumVotes: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): TransactionRequest { + return super.getDeployTransaction(_minimumVotes, overrides || {}); + } + override attach(address: string): GoldenProtocol { + return super.attach(address) as GoldenProtocol; + } + override connect(signer: Signer): GoldenProtocol__factory { + return super.connect(signer) as GoldenProtocol__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): GoldenProtocolInterface { + return new utils.Interface(_abi) as GoldenProtocolInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): GoldenProtocol { + return new Contract(address, _abi, signerOrProvider) as GoldenProtocol; + } +} diff --git a/typechain/factories/contracts/GoldenProtocol.sol/Question__factory.ts b/typechain/factories/contracts/GoldenProtocol.sol/Question__factory.ts new file mode 100644 index 00000000..69e628d9 --- /dev/null +++ b/typechain/factories/contracts/GoldenProtocol.sol/Question__factory.ts @@ -0,0 +1,238 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { + Signer, + utils, + Contract, + ContractFactory, + BytesLike, + BigNumberish, + Overrides, +} from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { + Question, + QuestionInterface, +} from "../../../contracts/GoldenProtocol.sol/Question"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "_owner", + type: "address", + }, + { + internalType: "address", + name: "_asker", + type: "address", + }, + { + internalType: "bytes16", + name: "_subjectUUID", + type: "bytes16", + }, + { + internalType: "bytes16", + name: "_predicateUUID", + type: "bytes16", + }, + { + internalType: "uint256", + name: "_bounty", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [ + { + internalType: "string", + name: "_answer", + type: "string", + }, + ], + name: "addAnswer", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "answers", + outputs: [ + { + internalType: "string[]", + name: "", + type: "string[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "answerer", + type: "address", + }, + { + internalType: "string", + name: "value", + type: "string", + }, + ], + name: "hashAnswer", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [], + name: "payout", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "topAnswer", + outputs: [ + { + components: [ + { + internalType: "address", + name: "answerer", + type: "address", + }, + { + internalType: "string", + name: "answer", + type: "string", + }, + { + internalType: "uint256", + name: "voteCount", + type: "uint256", + }, + ], + internalType: "struct Question.Answer", + name: "", + type: "tuple", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "index", + type: "uint256", + }, + ], + name: "upvote", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "votes", + outputs: [ + { + internalType: "uint256[]", + name: "", + type: "uint256[]", + }, + ], + stateMutability: "view", + type: "function", + }, +]; + +const _bytecode = + "0x608060405234801561001057600080fd5b50604051610ed1380380610ed183398101604081905261002f916100af565b600080546001600160a01b039687166001600160a01b0319918216179091556001805495909616941693909317909355608092831c600160801b02921c9190911760035560025561010d565b80516001600160a01b038116811461009257600080fd5b919050565b80516001600160801b03198116811461009257600080fd5b600080600080600060a086880312156100c757600080fd5b6100d08661007b565b94506100de6020870161007b565b93506100ec60408701610097565b92506100fa60608701610097565b9150608086015190509295509295909350565b610db58061011c6000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c806388775d8f1161005b57806388775d8f146100c557806388fae0e9146100d8578063e1145e4b146100ed578063e168c3ec1461010257600080fd5b806301ddf07014610082578063366b2baa1461009757806363bd1d4a146100bd575b600080fd5b6100956100903660046108eb565b610117565b005b6100aa6100a536600461091a565b610182565b6040519081526020015b60405180910390f35b6100956101b9565b6100956100d33660046109ea565b61032a565b6100e061036c565b6040516100b49190610aa2565b6100f56104e6565b6040516100b49190610ae6565b61010a610638565b6040516100b49190610b48565b60006101246005836106f1565b6001600160a01b0381166000908152600b602052604081208054929350339260019290610152908490610ba2565b90915550506001600160a01b0381166000908152600a6020526040902083905561017d600782610724565b505050565b60008282604051602001610197929190610bb5565b6040516020818303038152906040528051906020012060001c90505b92915050565b6001546001600160a01b0316331461020e5760405162461bcd60e51b815260206004820152601360248201527228bab2b9ba34b7b71d1037b7363ca0b9b5b2b960691b60448201526064015b60405180910390fd5b600061021861036c565b6000546040808301518151631901f83560e21b815291519394506001600160a01b03909216928391636407e0d49160048083019260209291908290030181865afa15801561026a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061028e9190610be1565b11156102eb5760405162461bcd60e51b815260206004820152602660248201527f5175657374696f6e3a207061796f75743a206d696e696d756d566f746573206e6044820152651bdd081b595d60d21b6064820152608401610205565b81516002546040516001600160a01b0383169180156108fc02916000818181858888f19350505050158015610324573d6000803e3d6000fd5b50505050565b336000818152600960205260409020610344838583610c7c565b50610350600582610724565b6001600160a01b03166000908152600b60205260408120555050565b610399604051806060016040528060006001600160a01b0316815260200160608152602001600081525090565b60008060005b6006548110156103fd576000600b816103b96005856106f1565b6001600160a01b03166001600160a01b031681526020019081526020016000205490508381106103ea578093508192505b50806103f581610d3d565b91505061039f565b50600061040b6005836106f1565b90506040518060600160405280826001600160a01b0316815260200160096000846001600160a01b03166001600160a01b03168152602001908152602001600020805461045790610bfa565b80601f016020809104026020016040519081016040528092919081815260200182805461048390610bfa565b80156104d05780601f106104a5576101008083540402835291602001916104d0565b820191906000526020600020905b8154815290600101906020018083116104b357829003601f168201915b5050505050815260200184815250935050505090565b60065460609060009067ffffffffffffffff81111561050757610507610904565b60405190808252806020026020018201604052801561053a57816020015b60608152602001906001900390816105255790505b50905060005b60065481101561063257600960006105596005846106f1565b6001600160a01b03166001600160a01b03168152602001908152602001600020805461058490610bfa565b80601f01602080910402602001604051908101604052809291908181526020018280546105b090610bfa565b80156105fd5780601f106105d2576101008083540402835291602001916105fd565b820191906000526020600020905b8154815290600101906020018083116105e057829003601f168201915b505050505082828151811061061457610614610d56565b6020026020010181905250808061062a90610d3d565b915050610540565b50919050565b60065460609060009067ffffffffffffffff81111561065957610659610904565b604051908082528060200260200182016040528015610682578160200160208202803683370190505b50905060005b60065481101561063257600b60006106a16005846106f1565b6001600160a01b03166001600160a01b03168152602001908152602001600020548282815181106106d4576106d4610d56565b6020908102919091010152806106e981610d3d565b915050610688565b600082600101828154811061070857610708610d56565b6000918252602090912001546001600160a01b03169392505050565b61072e8282610740565b61073c5761073c82826107a3565b5050565b60018201546000908103610756575060006101b3565b6001600160a01b038216600081815260208590526040902054600185018054909190811061078657610786610d56565b6000918252602090912001546001600160a01b0316149392505050565b6001600160a01b03811661080a5760405162461bcd60e51b815260206004820152602860248201527f556e6f7264657265644b65795365742831303029202d204b65792063616e6e6f604482015267074206265203078360c41b6064820152608401610205565b6108148282610740565b156108935760405162461bcd60e51b815260206004820152604360248201527f556e6f726465726564416464726573735365742831303129202d20416464726560448201527f737320286b65792920616c72656164792065786973747320696e20746865207360648201526232ba1760e91b608482015260a401610205565b6001828101805480830182556000828152602090200180546001600160a01b0319166001600160a01b038516179055546108cd9190610d6c565b6001600160a01b039091166000908152602092909252604090912055565b6000602082840312156108fd57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561092d57600080fd5b82356001600160a01b038116811461094457600080fd5b9150602083013567ffffffffffffffff8082111561096157600080fd5b818501915085601f83011261097557600080fd5b81358181111561098757610987610904565b604051601f8201601f19908116603f011681019083821181831017156109af576109af610904565b816040528281528860208487010111156109c857600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600080602083850312156109fd57600080fd5b823567ffffffffffffffff80821115610a1557600080fd5b818501915085601f830112610a2957600080fd5b813581811115610a3857600080fd5b866020828501011115610a4a57600080fd5b60209290920196919550909350505050565b6000815180845260005b81811015610a8257602081850181015186830182015201610a66565b506000602082860101526020601f19601f83011685010191505092915050565b602080825282516001600160a01b03168282015282015160606040830152600090610ad06080840182610a5c565b9050604084015160608401528091505092915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015610b3b57603f19888603018452610b29858351610a5c565b94509285019290850190600101610b0d565b5092979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015610b8057835183529284019291840191600101610b64565b50909695505050505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156101b3576101b3610b8c565b6001600160a01b0383168152604060208201819052600090610bd990830184610a5c565b949350505050565b600060208284031215610bf357600080fd5b5051919050565b600181811c90821680610c0e57607f821691505b60208210810361063257634e487b7160e01b600052602260045260246000fd5b601f82111561017d57600081815260208120601f850160051c81016020861015610c555750805b601f850160051c820191505b81811015610c7457828155600101610c61565b505050505050565b67ffffffffffffffff831115610c9457610c94610904565b610ca883610ca28354610bfa565b83610c2e565b6000601f841160018114610cdc5760008515610cc45750838201355b600019600387901b1c1916600186901b178355610d36565b600083815260209020601f19861690835b82811015610d0d5786850135825560209485019460019092019101610ced565b5086821015610d2a5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b600060018201610d4f57610d4f610b8c565b5060010190565b634e487b7160e01b600052603260045260246000fd5b818103818111156101b3576101b3610b8c56fea2646970667358221220894181ef21cbda37f611438fab04dda65242216f7a6d9f4bbe881068cda0363e64736f6c63430008100033"; + +type QuestionConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: QuestionConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class Question__factory extends ContractFactory { + constructor(...args: QuestionConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + _owner: string, + _asker: string, + _subjectUUID: BytesLike, + _predicateUUID: BytesLike, + _bounty: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise { + return super.deploy( + _owner, + _asker, + _subjectUUID, + _predicateUUID, + _bounty, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + _owner: string, + _asker: string, + _subjectUUID: BytesLike, + _predicateUUID: BytesLike, + _bounty: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): TransactionRequest { + return super.getDeployTransaction( + _owner, + _asker, + _subjectUUID, + _predicateUUID, + _bounty, + overrides || {} + ); + } + override attach(address: string): Question { + return super.attach(address) as Question; + } + override connect(signer: Signer): Question__factory { + return super.connect(signer) as Question__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): QuestionInterface { + return new utils.Interface(_abi) as QuestionInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): Question { + return new Contract(address, _abi, signerOrProvider) as Question; + } +} diff --git a/typechain/factories/contracts/GoldenProtocol.sol/index.ts b/typechain/factories/contracts/GoldenProtocol.sol/index.ts new file mode 100644 index 00000000..1006bb90 --- /dev/null +++ b/typechain/factories/contracts/GoldenProtocol.sol/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { GoldenProtocol__factory } from "./GoldenProtocol__factory"; +export { GoldenProtocolQuestion__factory } from "./GoldenProtocolQuestion__factory"; diff --git a/typechain/factories/contracts/index.ts b/typechain/factories/contracts/index.ts index 667bcf79..be54c60d 100644 --- a/typechain/factories/contracts/index.ts +++ b/typechain/factories/contracts/index.ts @@ -1,6 +1,7 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ +export * as goldenProtocolSol from "./GoldenProtocol.sol"; export * as nft from "./nft"; export { GoldenSchema__factory } from "./GoldenSchema__factory"; export { GoldenSchemaGovernor__factory } from "./GoldenSchemaGovernor__factory"; diff --git a/typechain/index.ts b/typechain/index.ts index c2ac10fe..f85d6da8 100644 --- a/typechain/index.ts +++ b/typechain/index.ts @@ -72,6 +72,10 @@ export type { IERC165 } from "./@openzeppelin/contracts/utils/introspection/IERC export { IERC165__factory } from "./factories/@openzeppelin/contracts/utils/introspection/IERC165__factory"; export type { DoubleEndedQueue } from "./@openzeppelin/contracts/utils/structs/DoubleEndedQueue"; export { DoubleEndedQueue__factory } from "./factories/@openzeppelin/contracts/utils/structs/DoubleEndedQueue__factory"; +export type { GoldenProtocol } from "./contracts/GoldenProtocol.sol/GoldenProtocol"; +export { GoldenProtocol__factory } from "./factories/contracts/GoldenProtocol.sol/GoldenProtocol__factory"; +export type { GoldenProtocolQuestion } from "./contracts/GoldenProtocol.sol/GoldenProtocolQuestion"; +export { GoldenProtocolQuestion__factory } from "./factories/contracts/GoldenProtocol.sol/GoldenProtocolQuestion__factory"; export type { GoldenSchema } from "./contracts/GoldenSchema"; export { GoldenSchema__factory } from "./factories/contracts/GoldenSchema__factory"; export type { GoldenSchemaGovernor } from "./contracts/GoldenSchemaGovernor"; From 30a000d5cea8a827344554f68a36ce6f57d1feb4 Mon Sep 17 00:00:00 2001 From: Dave Hrdlicka Date: Mon, 17 Oct 2022 16:56:17 +0200 Subject: [PATCH 2/8] Fix USD price reports --- .env.example | 6 +++++- hardhat.config.ts | 1 + test/GoldenProtocol.ts | 6 +++++- .../GoldenProtocol.sol/GoldenProtocolQuestion__factory.ts | 2 +- .../contracts/GoldenProtocol.sol/GoldenProtocol__factory.ts | 2 +- 5 files changed, 13 insertions(+), 4 deletions(-) diff --git a/.env.example b/.env.example index 7111f279..7c91e086 100644 --- a/.env.example +++ b/.env.example @@ -2,4 +2,8 @@ ETHERSCAN_API_KEY=ABC123ABC123ABC123ABC123ABC123ABC1 RINKEBY_URL=https://eth-rinkeby.alchemyapi.io/v2/wJsSSKTeAmqF2G5D56g00CX8fzwumcu0 GOERLI_URL=https://eth-goerli.alchemyapi.io/v2/bfUg0Rqe5lS1SeU7bE6PVoDDCOVlNr1P PRIVATE_KEY=e5f86b5eaf2888e6b7e799f95be61da578b8629fa1bc4588cf202675e7787bd9 -REPORT_GAS=true \ No newline at end of file +REPORT_GAS=true + +# Get an API key here if you want to see USD prices in test reports +# https://pro.coinmarketcap.com/signup +COINMARKETCAP_API_KEY=abcdefg-1234-5678-90ab-cdefghijklmn diff --git a/hardhat.config.ts b/hardhat.config.ts index a60096ea..707b3eb2 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -65,6 +65,7 @@ const config: HardhatUserConfig = { }, gasReporter: { enabled: process.env.REPORT_GAS !== undefined, + coinmarketcap: process.env.COINMARKETCAP_API_KEY, currency: 'USD', }, etherscan: { diff --git a/test/GoldenProtocol.ts b/test/GoldenProtocol.ts index 10267f03..e0d7bde5 100644 --- a/test/GoldenProtocol.ts +++ b/test/GoldenProtocol.ts @@ -59,7 +59,6 @@ describe('GoldenProtocol', function () { // Answer it const questionAddresses = await answerer.GoldenProtocol.questions(); - console.log({ questionAddresses }); const GoldenProtocolQuestionAnswerer = await ethers.getContractAt( 'GoldenProtocolQuestion', @@ -98,6 +97,11 @@ describe('GoldenProtocol', function () { const transactionVote = await GoldenProtocolQuestionVerifier.upvote(0); const resultVote = await transactionVote.wait(); expect(resultVote.status).to.equal(1); + + const topAnswer = await GoldenProtocolQuestionVerifier.topAnswer(); + expect(topAnswer.answerer).to.equal(answerer.address); + expect(topAnswer.answer).to.equal(answer); + expect(topAnswer.voteCount).to.equal(ethers.BigNumber.from(1)); }); }); }); diff --git a/typechain/factories/contracts/GoldenProtocol.sol/GoldenProtocolQuestion__factory.ts b/typechain/factories/contracts/GoldenProtocol.sol/GoldenProtocolQuestion__factory.ts index c26d5e1b..af473dc2 100644 --- a/typechain/factories/contracts/GoldenProtocol.sol/GoldenProtocolQuestion__factory.ts +++ b/typechain/factories/contracts/GoldenProtocol.sol/GoldenProtocolQuestion__factory.ts @@ -242,7 +242,7 @@ const _abi = [ ]; const _bytecode = - "0x608060405234801561001057600080fd5b506040516200110638038062001106833981016040819052610031916100b1565b600080546001600160a01b039687166001600160a01b0319918216179091556001805495909616941693909317909355608092831c600160801b02921c9190911760035560025561010f565b80516001600160a01b038116811461009457600080fd5b919050565b80516001600160801b03198116811461009457600080fd5b600080600080600060a086880312156100c957600080fd5b6100d28661007d565b94506100e06020870161007d565b93506100ee60408701610099565b92506100fc60608701610099565b9150608086015190509295509295909350565b610fe7806200011f6000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c806388fae0e91161008c578063bbe0ba8511610066578063bbe0ba85146101b7578063c7a66eb3146101cb578063e1145e4b146101de578063e168c3ec146101f357600080fd5b806388fae0e91461016e5780638da5cb5b14610183578063943dfef1146101ae57600080fd5b806301ddf070146100d4578063366b2baa146100e957806363bd1d4a1461010f5780637a2faee01461011757806385bb7d691461014657806388775d8f1461015b575b600080fd5b6100e76100e2366004610b03565b610208565b005b6100fc6100f7366004610b32565b6102ef565b6040519081526020015b60405180910390f35b6100e7610326565b6003546101249060801b81565b6040516fffffffffffffffffffffffffffffffff199091168152602001610106565b61014e6104b4565b6040516101069190610c48565b6100e7610169366004610c62565b610542565b610176610584565b6040516101069190610cd4565b600054610196906001600160a01b031681565b6040516001600160a01b039091168152602001610106565b6100fc60025481565b60035461012490600160801b900460801b81565b600154610196906001600160a01b031681565b6101e66106fe565b6040516101069190610d18565b6101fb610850565b6040516101069190610d7a565b60065481106102845760405162461bcd60e51b815260206004820152603860248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a20746865726520697360448201527f206e6f20616e73776572206174207468617420696e646578000000000000000060648201526084015b60405180910390fd5b6000610291600583610909565b6001600160a01b0381166000908152600b6020526040812080549293503392600192906102bf908490610dd4565b90915550506001600160a01b0381166000908152600a602052604090208390556102ea60078261093c565b505050565b60008282604051602001610304929190610de7565b6040516020818303038152906040528051906020012060001c90505b92915050565b6001546001600160a01b0316331461038a5760405162461bcd60e51b815260206004820152602160248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a206f6e6c7941736b656044820152603960f91b606482015260840161027b565b6000610394610584565b6000546040808301518151631901f83560e21b815291519394506001600160a01b03909216928391636407e0d49160048083019260209291908290030181865afa1580156103e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040a9190610e13565b11156104755760405162461bcd60e51b815260206004820152603460248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a207061796f75743a206044820152731b5a5b9a5b5d5b559bdd195cc81b9bdd081b595d60621b606482015260840161027b565b81516002546040516001600160a01b0383169180156108fc02916000818181858888f193505050501580156104ae573d6000803e3d6000fd5b50505050565b600480546104c190610e2c565b80601f01602080910402602001604051908101604052809291908181526020018280546104ed90610e2c565b801561053a5780601f1061050f5761010080835404028352916020019161053a565b820191906000526020600020905b81548152906001019060200180831161051d57829003601f168201915b505050505081565b33600081815260096020526040902061055c838583610eae565b5061056860058261093c565b6001600160a01b03166000908152600b60205260408120555050565b6105b1604051806060016040528060006001600160a01b0316815260200160608152602001600081525090565b60008060005b600654811015610615576000600b816105d1600585610909565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050838110610602578093508192505b508061060d81610f6f565b9150506105b7565b506000610623600583610909565b90506040518060600160405280826001600160a01b0316815260200160096000846001600160a01b03166001600160a01b03168152602001908152602001600020805461066f90610e2c565b80601f016020809104026020016040519081016040528092919081815260200182805461069b90610e2c565b80156106e85780601f106106bd576101008083540402835291602001916106e8565b820191906000526020600020905b8154815290600101906020018083116106cb57829003601f168201915b5050505050815260200184815250935050505090565b60065460609060009067ffffffffffffffff81111561071f5761071f610b1c565b60405190808252806020026020018201604052801561075257816020015b606081526020019060019003908161073d5790505b50905060005b60065481101561084a5760096000610771600584610909565b6001600160a01b03166001600160a01b03168152602001908152602001600020805461079c90610e2c565b80601f01602080910402602001604051908101604052809291908181526020018280546107c890610e2c565b80156108155780601f106107ea57610100808354040283529160200191610815565b820191906000526020600020905b8154815290600101906020018083116107f857829003601f168201915b505050505082828151811061082c5761082c610f88565b6020026020010181905250808061084290610f6f565b915050610758565b50919050565b60065460609060009067ffffffffffffffff81111561087157610871610b1c565b60405190808252806020026020018201604052801561089a578160200160208202803683370190505b50905060005b60065481101561084a57600b60006108b9600584610909565b6001600160a01b03166001600160a01b03168152602001908152602001600020548282815181106108ec576108ec610f88565b60209081029190910101528061090181610f6f565b9150506108a0565b600082600101828154811061092057610920610f88565b6000918252602090912001546001600160a01b03169392505050565b6109468282610958565b6109545761095482826109bb565b5050565b6001820154600090810361096e57506000610320565b6001600160a01b038216600081815260208590526040902054600185018054909190811061099e5761099e610f88565b6000918252602090912001546001600160a01b0316149392505050565b6001600160a01b038116610a225760405162461bcd60e51b815260206004820152602860248201527f556e6f7264657265644b65795365742831303029202d204b65792063616e6e6f604482015267074206265203078360c41b606482015260840161027b565b610a2c8282610958565b15610aab5760405162461bcd60e51b815260206004820152604360248201527f556e6f726465726564416464726573735365742831303129202d20416464726560448201527f737320286b65792920616c72656164792065786973747320696e20746865207360648201526232ba1760e91b608482015260a40161027b565b6001828101805480830182556000828152602090200180546001600160a01b0319166001600160a01b03851617905554610ae59190610f9e565b6001600160a01b039091166000908152602092909252604090912055565b600060208284031215610b1557600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610b4557600080fd5b82356001600160a01b0381168114610b5c57600080fd5b9150602083013567ffffffffffffffff80821115610b7957600080fd5b818501915085601f830112610b8d57600080fd5b813581811115610b9f57610b9f610b1c565b604051601f8201601f19908116603f01168101908382118183101715610bc757610bc7610b1c565b81604052828152886020848701011115610be057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000815180845260005b81811015610c2857602081850181015186830182015201610c0c565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610c5b6020830184610c02565b9392505050565b60008060208385031215610c7557600080fd5b823567ffffffffffffffff80821115610c8d57600080fd5b818501915085601f830112610ca157600080fd5b813581811115610cb057600080fd5b866020828501011115610cc257600080fd5b60209290920196919550909350505050565b602080825282516001600160a01b03168282015282015160606040830152600090610d026080840182610c02565b9050604084015160608401528091505092915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015610d6d57603f19888603018452610d5b858351610c02565b94509285019290850190600101610d3f565b5092979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015610db257835183529284019291840191600101610d96565b50909695505050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561032057610320610dbe565b6001600160a01b0383168152604060208201819052600090610e0b90830184610c02565b949350505050565b600060208284031215610e2557600080fd5b5051919050565b600181811c90821680610e4057607f821691505b60208210810361084a57634e487b7160e01b600052602260045260246000fd5b601f8211156102ea57600081815260208120601f850160051c81016020861015610e875750805b601f850160051c820191505b81811015610ea657828155600101610e93565b505050505050565b67ffffffffffffffff831115610ec657610ec6610b1c565b610eda83610ed48354610e2c565b83610e60565b6000601f841160018114610f0e5760008515610ef65750838201355b600019600387901b1c1916600186901b178355610f68565b600083815260209020601f19861690835b82811015610f3f5786850135825560209485019460019092019101610f1f565b5086821015610f5c5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b600060018201610f8157610f81610dbe565b5060010190565b634e487b7160e01b600052603260045260246000fd5b8181038181111561032057610320610dbe56fea26469706673582212200b2068918e463536645476419e8a6876e0ccd17cd7b90a02860f03af20c8c0c864736f6c63430008100033"; + "0x608060405234801561001057600080fd5b506040516200110638038062001106833981016040819052610031916100b1565b600080546001600160a01b039687166001600160a01b0319918216179091556001805495909616941693909317909355608092831c600160801b02921c9190911760035560025561010f565b80516001600160a01b038116811461009457600080fd5b919050565b80516001600160801b03198116811461009457600080fd5b600080600080600060a086880312156100c957600080fd5b6100d28661007d565b94506100e06020870161007d565b93506100ee60408701610099565b92506100fc60608701610099565b9150608086015190509295509295909350565b610fe7806200011f6000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c806388fae0e91161008c578063bbe0ba8511610066578063bbe0ba85146101b7578063c7a66eb3146101cb578063e1145e4b146101de578063e168c3ec146101f357600080fd5b806388fae0e91461016e5780638da5cb5b14610183578063943dfef1146101ae57600080fd5b806301ddf070146100d4578063366b2baa146100e957806363bd1d4a1461010f5780637a2faee01461011757806385bb7d691461014657806388775d8f1461015b575b600080fd5b6100e76100e2366004610b03565b610208565b005b6100fc6100f7366004610b32565b6102ef565b6040519081526020015b60405180910390f35b6100e7610326565b6003546101249060801b81565b6040516fffffffffffffffffffffffffffffffff199091168152602001610106565b61014e6104b4565b6040516101069190610c48565b6100e7610169366004610c62565b610542565b610176610584565b6040516101069190610cd4565b600054610196906001600160a01b031681565b6040516001600160a01b039091168152602001610106565b6100fc60025481565b60035461012490600160801b900460801b81565b600154610196906001600160a01b031681565b6101e66106fe565b6040516101069190610d18565b6101fb610850565b6040516101069190610d7a565b60065481106102845760405162461bcd60e51b815260206004820152603860248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a20746865726520697360448201527f206e6f20616e73776572206174207468617420696e646578000000000000000060648201526084015b60405180910390fd5b6000610291600583610909565b6001600160a01b0381166000908152600b6020526040812080549293503392600192906102bf908490610dd4565b90915550506001600160a01b0381166000908152600a602052604090208390556102ea60078261093c565b505050565b60008282604051602001610304929190610de7565b6040516020818303038152906040528051906020012060001c90505b92915050565b6001546001600160a01b0316331461038a5760405162461bcd60e51b815260206004820152602160248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a206f6e6c7941736b656044820152603960f91b606482015260840161027b565b6000610394610584565b6000546040808301518151631901f83560e21b815291519394506001600160a01b03909216928391636407e0d49160048083019260209291908290030181865afa1580156103e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040a9190610e13565b11156104755760405162461bcd60e51b815260206004820152603460248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a207061796f75743a206044820152731b5a5b9a5b5d5b559bdd195cc81b9bdd081b595d60621b606482015260840161027b565b81516002546040516001600160a01b0383169180156108fc02916000818181858888f193505050501580156104ae573d6000803e3d6000fd5b50505050565b600480546104c190610e2c565b80601f01602080910402602001604051908101604052809291908181526020018280546104ed90610e2c565b801561053a5780601f1061050f5761010080835404028352916020019161053a565b820191906000526020600020905b81548152906001019060200180831161051d57829003601f168201915b505050505081565b33600081815260096020526040902061055c838583610eae565b5061056860058261093c565b6001600160a01b03166000908152600b60205260408120555050565b6105b1604051806060016040528060006001600160a01b0316815260200160608152602001600081525090565b60008060005b600654811015610615576000600b816105d1600585610909565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050838110610602578093508192505b508061060d81610f6f565b9150506105b7565b506000610623600583610909565b90506040518060600160405280826001600160a01b0316815260200160096000846001600160a01b03166001600160a01b03168152602001908152602001600020805461066f90610e2c565b80601f016020809104026020016040519081016040528092919081815260200182805461069b90610e2c565b80156106e85780601f106106bd576101008083540402835291602001916106e8565b820191906000526020600020905b8154815290600101906020018083116106cb57829003601f168201915b5050505050815260200184815250935050505090565b60065460609060009067ffffffffffffffff81111561071f5761071f610b1c565b60405190808252806020026020018201604052801561075257816020015b606081526020019060019003908161073d5790505b50905060005b60065481101561084a5760096000610771600584610909565b6001600160a01b03166001600160a01b03168152602001908152602001600020805461079c90610e2c565b80601f01602080910402602001604051908101604052809291908181526020018280546107c890610e2c565b80156108155780601f106107ea57610100808354040283529160200191610815565b820191906000526020600020905b8154815290600101906020018083116107f857829003601f168201915b505050505082828151811061082c5761082c610f88565b6020026020010181905250808061084290610f6f565b915050610758565b50919050565b60065460609060009067ffffffffffffffff81111561087157610871610b1c565b60405190808252806020026020018201604052801561089a578160200160208202803683370190505b50905060005b60065481101561084a57600b60006108b9600584610909565b6001600160a01b03166001600160a01b03168152602001908152602001600020548282815181106108ec576108ec610f88565b60209081029190910101528061090181610f6f565b9150506108a0565b600082600101828154811061092057610920610f88565b6000918252602090912001546001600160a01b03169392505050565b6109468282610958565b6109545761095482826109bb565b5050565b6001820154600090810361096e57506000610320565b6001600160a01b038216600081815260208590526040902054600185018054909190811061099e5761099e610f88565b6000918252602090912001546001600160a01b0316149392505050565b6001600160a01b038116610a225760405162461bcd60e51b815260206004820152602860248201527f556e6f7264657265644b65795365742831303029202d204b65792063616e6e6f604482015267074206265203078360c41b606482015260840161027b565b610a2c8282610958565b15610aab5760405162461bcd60e51b815260206004820152604360248201527f556e6f726465726564416464726573735365742831303129202d20416464726560448201527f737320286b65792920616c72656164792065786973747320696e20746865207360648201526232ba1760e91b608482015260a40161027b565b6001828101805480830182556000828152602090200180546001600160a01b0319166001600160a01b03851617905554610ae59190610f9e565b6001600160a01b039091166000908152602092909252604090912055565b600060208284031215610b1557600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610b4557600080fd5b82356001600160a01b0381168114610b5c57600080fd5b9150602083013567ffffffffffffffff80821115610b7957600080fd5b818501915085601f830112610b8d57600080fd5b813581811115610b9f57610b9f610b1c565b604051601f8201601f19908116603f01168101908382118183101715610bc757610bc7610b1c565b81604052828152886020848701011115610be057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000815180845260005b81811015610c2857602081850181015186830182015201610c0c565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610c5b6020830184610c02565b9392505050565b60008060208385031215610c7557600080fd5b823567ffffffffffffffff80821115610c8d57600080fd5b818501915085601f830112610ca157600080fd5b813581811115610cb057600080fd5b866020828501011115610cc257600080fd5b60209290920196919550909350505050565b602080825282516001600160a01b03168282015282015160606040830152600090610d026080840182610c02565b9050604084015160608401528091505092915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015610d6d57603f19888603018452610d5b858351610c02565b94509285019290850190600101610d3f565b5092979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015610db257835183529284019291840191600101610d96565b50909695505050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561032057610320610dbe565b6001600160a01b0383168152604060208201819052600090610e0b90830184610c02565b949350505050565b600060208284031215610e2557600080fd5b5051919050565b600181811c90821680610e4057607f821691505b60208210810361084a57634e487b7160e01b600052602260045260246000fd5b601f8211156102ea57600081815260208120601f850160051c81016020861015610e875750805b601f850160051c820191505b81811015610ea657828155600101610e93565b505050505050565b67ffffffffffffffff831115610ec657610ec6610b1c565b610eda83610ed48354610e2c565b83610e60565b6000601f841160018114610f0e5760008515610ef65750838201355b600019600387901b1c1916600186901b178355610f68565b600083815260209020601f19861690835b82811015610f3f5786850135825560209485019460019092019101610f1f565b5086821015610f5c5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b600060018201610f8157610f81610dbe565b5060010190565b634e487b7160e01b600052603260045260246000fd5b8181038181111561032057610320610dbe56fea26469706673582212204a4176ba359ac38e81e59c8c29cc87df45ca270aef1e1b93f7ccc577216678de64736f6c63430008100033"; type GoldenProtocolQuestionConstructorParams = | [signer?: Signer] diff --git a/typechain/factories/contracts/GoldenProtocol.sol/GoldenProtocol__factory.ts b/typechain/factories/contracts/GoldenProtocol.sol/GoldenProtocol__factory.ts index e4b35fe9..faa43352 100644 --- a/typechain/factories/contracts/GoldenProtocol.sol/GoldenProtocol__factory.ts +++ b/typechain/factories/contracts/GoldenProtocol.sol/GoldenProtocol__factory.ts @@ -150,7 +150,7 @@ const _abi = [ ]; const _bytecode = - "0x608060405234801561001057600080fd5b5060405161181938038061181983398101604081905261002f91610090565b61003833610040565b6004556100a9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100a257600080fd5b5051919050565b611761806100b86000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100bd5780639902b633146100e2578063d6fbfb24146100f5578063f2fde38b1461010857600080fd5b80636407e0d414610082578063715018a61461009e57806377a49821146100a8575b600080fd5b61008b60045481565b6040519081526020015b60405180910390f35b6100a661011b565b005b6100b061012f565b60405161009591906104ff565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610095565b6100a66100f036600461054c565b610193565b6100ca610103366004610582565b6101a0565b6100a66101163660046105be565b61021d565b61012361029b565b61012d60006102f5565b565b60606001800180548060200260200160405190810160405280929190818152602001828054801561018957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161016b575b5050505050905090565b61019b61029b565b600455565b60008030338686866040516101b4906104f2565b6001600160a01b0395861681529490931660208501526001600160801b03199182166040850152166060830152608082015260a001604051809103906000f080158015610205573d6000803e3d6000fd5b50905080610214600182610345565b95945050505050565b61022561029b565b6001600160a01b03811661028f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b610298816102f5565b50565b6000546001600160a01b0316331461012d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610286565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381166103ac5760405162461bcd60e51b815260206004820152602860248201527f556e6f7264657265644b65795365742831303029202d204b65792063616e6e6f604482015267074206265203078360c41b6064820152608401610286565b6103b6828261048d565b156104355760405162461bcd60e51b815260206004820152604360248201527f556e6f726465726564416464726573735365742831303129202d20416464726560448201527f737320286b65792920616c72656164792065786973747320696e20746865207360648201526232ba1760e91b608482015260a401610286565b6001828101805480830182556000828152602090200180546001600160a01b0319166001600160a01b0385161790555461046f91906105ee565b6001600160a01b039091166000908152602092909252604090912055565b600182015460009081036104a3575060006104ec565b6001600160a01b03821660008181526020859052604090205460018501805490919081106104d3576104d361060f565b6000918252602090912001546001600160a01b03161490505b92915050565b6111068061062683390190565b6020808252825182820181905260009190848201906040850190845b818110156105405783516001600160a01b03168352928401929184019160010161051b565b50909695505050505050565b60006020828403121561055e57600080fd5b5035919050565b80356001600160801b03198116811461057d57600080fd5b919050565b60008060006060848603121561059757600080fd5b6105a084610565565b92506105ae60208501610565565b9150604084013590509250925092565b6000602082840312156105d057600080fd5b81356001600160a01b03811681146105e757600080fd5b9392505050565b818103818111156104ec57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fdfe608060405234801561001057600080fd5b506040516200110638038062001106833981016040819052610031916100b1565b600080546001600160a01b039687166001600160a01b0319918216179091556001805495909616941693909317909355608092831c600160801b02921c9190911760035560025561010f565b80516001600160a01b038116811461009457600080fd5b919050565b80516001600160801b03198116811461009457600080fd5b600080600080600060a086880312156100c957600080fd5b6100d28661007d565b94506100e06020870161007d565b93506100ee60408701610099565b92506100fc60608701610099565b9150608086015190509295509295909350565b610fe7806200011f6000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c806388fae0e91161008c578063bbe0ba8511610066578063bbe0ba85146101b7578063c7a66eb3146101cb578063e1145e4b146101de578063e168c3ec146101f357600080fd5b806388fae0e91461016e5780638da5cb5b14610183578063943dfef1146101ae57600080fd5b806301ddf070146100d4578063366b2baa146100e957806363bd1d4a1461010f5780637a2faee01461011757806385bb7d691461014657806388775d8f1461015b575b600080fd5b6100e76100e2366004610b03565b610208565b005b6100fc6100f7366004610b32565b6102ef565b6040519081526020015b60405180910390f35b6100e7610326565b6003546101249060801b81565b6040516fffffffffffffffffffffffffffffffff199091168152602001610106565b61014e6104b4565b6040516101069190610c48565b6100e7610169366004610c62565b610542565b610176610584565b6040516101069190610cd4565b600054610196906001600160a01b031681565b6040516001600160a01b039091168152602001610106565b6100fc60025481565b60035461012490600160801b900460801b81565b600154610196906001600160a01b031681565b6101e66106fe565b6040516101069190610d18565b6101fb610850565b6040516101069190610d7a565b60065481106102845760405162461bcd60e51b815260206004820152603860248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a20746865726520697360448201527f206e6f20616e73776572206174207468617420696e646578000000000000000060648201526084015b60405180910390fd5b6000610291600583610909565b6001600160a01b0381166000908152600b6020526040812080549293503392600192906102bf908490610dd4565b90915550506001600160a01b0381166000908152600a602052604090208390556102ea60078261093c565b505050565b60008282604051602001610304929190610de7565b6040516020818303038152906040528051906020012060001c90505b92915050565b6001546001600160a01b0316331461038a5760405162461bcd60e51b815260206004820152602160248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a206f6e6c7941736b656044820152603960f91b606482015260840161027b565b6000610394610584565b6000546040808301518151631901f83560e21b815291519394506001600160a01b03909216928391636407e0d49160048083019260209291908290030181865afa1580156103e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040a9190610e13565b11156104755760405162461bcd60e51b815260206004820152603460248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a207061796f75743a206044820152731b5a5b9a5b5d5b559bdd195cc81b9bdd081b595d60621b606482015260840161027b565b81516002546040516001600160a01b0383169180156108fc02916000818181858888f193505050501580156104ae573d6000803e3d6000fd5b50505050565b600480546104c190610e2c565b80601f01602080910402602001604051908101604052809291908181526020018280546104ed90610e2c565b801561053a5780601f1061050f5761010080835404028352916020019161053a565b820191906000526020600020905b81548152906001019060200180831161051d57829003601f168201915b505050505081565b33600081815260096020526040902061055c838583610eae565b5061056860058261093c565b6001600160a01b03166000908152600b60205260408120555050565b6105b1604051806060016040528060006001600160a01b0316815260200160608152602001600081525090565b60008060005b600654811015610615576000600b816105d1600585610909565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050838110610602578093508192505b508061060d81610f6f565b9150506105b7565b506000610623600583610909565b90506040518060600160405280826001600160a01b0316815260200160096000846001600160a01b03166001600160a01b03168152602001908152602001600020805461066f90610e2c565b80601f016020809104026020016040519081016040528092919081815260200182805461069b90610e2c565b80156106e85780601f106106bd576101008083540402835291602001916106e8565b820191906000526020600020905b8154815290600101906020018083116106cb57829003601f168201915b5050505050815260200184815250935050505090565b60065460609060009067ffffffffffffffff81111561071f5761071f610b1c565b60405190808252806020026020018201604052801561075257816020015b606081526020019060019003908161073d5790505b50905060005b60065481101561084a5760096000610771600584610909565b6001600160a01b03166001600160a01b03168152602001908152602001600020805461079c90610e2c565b80601f01602080910402602001604051908101604052809291908181526020018280546107c890610e2c565b80156108155780601f106107ea57610100808354040283529160200191610815565b820191906000526020600020905b8154815290600101906020018083116107f857829003601f168201915b505050505082828151811061082c5761082c610f88565b6020026020010181905250808061084290610f6f565b915050610758565b50919050565b60065460609060009067ffffffffffffffff81111561087157610871610b1c565b60405190808252806020026020018201604052801561089a578160200160208202803683370190505b50905060005b60065481101561084a57600b60006108b9600584610909565b6001600160a01b03166001600160a01b03168152602001908152602001600020548282815181106108ec576108ec610f88565b60209081029190910101528061090181610f6f565b9150506108a0565b600082600101828154811061092057610920610f88565b6000918252602090912001546001600160a01b03169392505050565b6109468282610958565b6109545761095482826109bb565b5050565b6001820154600090810361096e57506000610320565b6001600160a01b038216600081815260208590526040902054600185018054909190811061099e5761099e610f88565b6000918252602090912001546001600160a01b0316149392505050565b6001600160a01b038116610a225760405162461bcd60e51b815260206004820152602860248201527f556e6f7264657265644b65795365742831303029202d204b65792063616e6e6f604482015267074206265203078360c41b606482015260840161027b565b610a2c8282610958565b15610aab5760405162461bcd60e51b815260206004820152604360248201527f556e6f726465726564416464726573735365742831303129202d20416464726560448201527f737320286b65792920616c72656164792065786973747320696e20746865207360648201526232ba1760e91b608482015260a40161027b565b6001828101805480830182556000828152602090200180546001600160a01b0319166001600160a01b03851617905554610ae59190610f9e565b6001600160a01b039091166000908152602092909252604090912055565b600060208284031215610b1557600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610b4557600080fd5b82356001600160a01b0381168114610b5c57600080fd5b9150602083013567ffffffffffffffff80821115610b7957600080fd5b818501915085601f830112610b8d57600080fd5b813581811115610b9f57610b9f610b1c565b604051601f8201601f19908116603f01168101908382118183101715610bc757610bc7610b1c565b81604052828152886020848701011115610be057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000815180845260005b81811015610c2857602081850181015186830182015201610c0c565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610c5b6020830184610c02565b9392505050565b60008060208385031215610c7557600080fd5b823567ffffffffffffffff80821115610c8d57600080fd5b818501915085601f830112610ca157600080fd5b813581811115610cb057600080fd5b866020828501011115610cc257600080fd5b60209290920196919550909350505050565b602080825282516001600160a01b03168282015282015160606040830152600090610d026080840182610c02565b9050604084015160608401528091505092915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015610d6d57603f19888603018452610d5b858351610c02565b94509285019290850190600101610d3f565b5092979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015610db257835183529284019291840191600101610d96565b50909695505050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561032057610320610dbe565b6001600160a01b0383168152604060208201819052600090610e0b90830184610c02565b949350505050565b600060208284031215610e2557600080fd5b5051919050565b600181811c90821680610e4057607f821691505b60208210810361084a57634e487b7160e01b600052602260045260246000fd5b601f8211156102ea57600081815260208120601f850160051c81016020861015610e875750805b601f850160051c820191505b81811015610ea657828155600101610e93565b505050505050565b67ffffffffffffffff831115610ec657610ec6610b1c565b610eda83610ed48354610e2c565b83610e60565b6000601f841160018114610f0e5760008515610ef65750838201355b600019600387901b1c1916600186901b178355610f68565b600083815260209020601f19861690835b82811015610f3f5786850135825560209485019460019092019101610f1f565b5086821015610f5c5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b600060018201610f8157610f81610dbe565b5060010190565b634e487b7160e01b600052603260045260246000fd5b8181038181111561032057610320610dbe56fea26469706673582212200b2068918e463536645476419e8a6876e0ccd17cd7b90a02860f03af20c8c0c864736f6c63430008100033a264697066735822122094e937df5c35e55520283d8808f4fa4a0866c146129b2e0869c2f84eb801edf864736f6c63430008100033"; + "0x608060405234801561001057600080fd5b5060405161181938038061181983398101604081905261002f91610090565b61003833610040565b6004556100a9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100a257600080fd5b5051919050565b611761806100b86000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100bd5780639902b633146100e2578063d6fbfb24146100f5578063f2fde38b1461010857600080fd5b80636407e0d414610082578063715018a61461009e57806377a49821146100a8575b600080fd5b61008b60045481565b6040519081526020015b60405180910390f35b6100a661011b565b005b6100b061012f565b60405161009591906104ff565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610095565b6100a66100f036600461054c565b610193565b6100ca610103366004610582565b6101a0565b6100a66101163660046105be565b61021d565b61012361029b565b61012d60006102f5565b565b60606001800180548060200260200160405190810160405280929190818152602001828054801561018957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161016b575b5050505050905090565b61019b61029b565b600455565b60008030338686866040516101b4906104f2565b6001600160a01b0395861681529490931660208501526001600160801b03199182166040850152166060830152608082015260a001604051809103906000f080158015610205573d6000803e3d6000fd5b50905080610214600182610345565b95945050505050565b61022561029b565b6001600160a01b03811661028f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b610298816102f5565b50565b6000546001600160a01b0316331461012d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610286565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381166103ac5760405162461bcd60e51b815260206004820152602860248201527f556e6f7264657265644b65795365742831303029202d204b65792063616e6e6f604482015267074206265203078360c41b6064820152608401610286565b6103b6828261048d565b156104355760405162461bcd60e51b815260206004820152604360248201527f556e6f726465726564416464726573735365742831303129202d20416464726560448201527f737320286b65792920616c72656164792065786973747320696e20746865207360648201526232ba1760e91b608482015260a401610286565b6001828101805480830182556000828152602090200180546001600160a01b0319166001600160a01b0385161790555461046f91906105ee565b6001600160a01b039091166000908152602092909252604090912055565b600182015460009081036104a3575060006104ec565b6001600160a01b03821660008181526020859052604090205460018501805490919081106104d3576104d361060f565b6000918252602090912001546001600160a01b03161490505b92915050565b6111068061062683390190565b6020808252825182820181905260009190848201906040850190845b818110156105405783516001600160a01b03168352928401929184019160010161051b565b50909695505050505050565b60006020828403121561055e57600080fd5b5035919050565b80356001600160801b03198116811461057d57600080fd5b919050565b60008060006060848603121561059757600080fd5b6105a084610565565b92506105ae60208501610565565b9150604084013590509250925092565b6000602082840312156105d057600080fd5b81356001600160a01b03811681146105e757600080fd5b9392505050565b818103818111156104ec57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fdfe608060405234801561001057600080fd5b506040516200110638038062001106833981016040819052610031916100b1565b600080546001600160a01b039687166001600160a01b0319918216179091556001805495909616941693909317909355608092831c600160801b02921c9190911760035560025561010f565b80516001600160a01b038116811461009457600080fd5b919050565b80516001600160801b03198116811461009457600080fd5b600080600080600060a086880312156100c957600080fd5b6100d28661007d565b94506100e06020870161007d565b93506100ee60408701610099565b92506100fc60608701610099565b9150608086015190509295509295909350565b610fe7806200011f6000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c806388fae0e91161008c578063bbe0ba8511610066578063bbe0ba85146101b7578063c7a66eb3146101cb578063e1145e4b146101de578063e168c3ec146101f357600080fd5b806388fae0e91461016e5780638da5cb5b14610183578063943dfef1146101ae57600080fd5b806301ddf070146100d4578063366b2baa146100e957806363bd1d4a1461010f5780637a2faee01461011757806385bb7d691461014657806388775d8f1461015b575b600080fd5b6100e76100e2366004610b03565b610208565b005b6100fc6100f7366004610b32565b6102ef565b6040519081526020015b60405180910390f35b6100e7610326565b6003546101249060801b81565b6040516fffffffffffffffffffffffffffffffff199091168152602001610106565b61014e6104b4565b6040516101069190610c48565b6100e7610169366004610c62565b610542565b610176610584565b6040516101069190610cd4565b600054610196906001600160a01b031681565b6040516001600160a01b039091168152602001610106565b6100fc60025481565b60035461012490600160801b900460801b81565b600154610196906001600160a01b031681565b6101e66106fe565b6040516101069190610d18565b6101fb610850565b6040516101069190610d7a565b60065481106102845760405162461bcd60e51b815260206004820152603860248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a20746865726520697360448201527f206e6f20616e73776572206174207468617420696e646578000000000000000060648201526084015b60405180910390fd5b6000610291600583610909565b6001600160a01b0381166000908152600b6020526040812080549293503392600192906102bf908490610dd4565b90915550506001600160a01b0381166000908152600a602052604090208390556102ea60078261093c565b505050565b60008282604051602001610304929190610de7565b6040516020818303038152906040528051906020012060001c90505b92915050565b6001546001600160a01b0316331461038a5760405162461bcd60e51b815260206004820152602160248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a206f6e6c7941736b656044820152603960f91b606482015260840161027b565b6000610394610584565b6000546040808301518151631901f83560e21b815291519394506001600160a01b03909216928391636407e0d49160048083019260209291908290030181865afa1580156103e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040a9190610e13565b11156104755760405162461bcd60e51b815260206004820152603460248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a207061796f75743a206044820152731b5a5b9a5b5d5b559bdd195cc81b9bdd081b595d60621b606482015260840161027b565b81516002546040516001600160a01b0383169180156108fc02916000818181858888f193505050501580156104ae573d6000803e3d6000fd5b50505050565b600480546104c190610e2c565b80601f01602080910402602001604051908101604052809291908181526020018280546104ed90610e2c565b801561053a5780601f1061050f5761010080835404028352916020019161053a565b820191906000526020600020905b81548152906001019060200180831161051d57829003601f168201915b505050505081565b33600081815260096020526040902061055c838583610eae565b5061056860058261093c565b6001600160a01b03166000908152600b60205260408120555050565b6105b1604051806060016040528060006001600160a01b0316815260200160608152602001600081525090565b60008060005b600654811015610615576000600b816105d1600585610909565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050838110610602578093508192505b508061060d81610f6f565b9150506105b7565b506000610623600583610909565b90506040518060600160405280826001600160a01b0316815260200160096000846001600160a01b03166001600160a01b03168152602001908152602001600020805461066f90610e2c565b80601f016020809104026020016040519081016040528092919081815260200182805461069b90610e2c565b80156106e85780601f106106bd576101008083540402835291602001916106e8565b820191906000526020600020905b8154815290600101906020018083116106cb57829003601f168201915b5050505050815260200184815250935050505090565b60065460609060009067ffffffffffffffff81111561071f5761071f610b1c565b60405190808252806020026020018201604052801561075257816020015b606081526020019060019003908161073d5790505b50905060005b60065481101561084a5760096000610771600584610909565b6001600160a01b03166001600160a01b03168152602001908152602001600020805461079c90610e2c565b80601f01602080910402602001604051908101604052809291908181526020018280546107c890610e2c565b80156108155780601f106107ea57610100808354040283529160200191610815565b820191906000526020600020905b8154815290600101906020018083116107f857829003601f168201915b505050505082828151811061082c5761082c610f88565b6020026020010181905250808061084290610f6f565b915050610758565b50919050565b60065460609060009067ffffffffffffffff81111561087157610871610b1c565b60405190808252806020026020018201604052801561089a578160200160208202803683370190505b50905060005b60065481101561084a57600b60006108b9600584610909565b6001600160a01b03166001600160a01b03168152602001908152602001600020548282815181106108ec576108ec610f88565b60209081029190910101528061090181610f6f565b9150506108a0565b600082600101828154811061092057610920610f88565b6000918252602090912001546001600160a01b03169392505050565b6109468282610958565b6109545761095482826109bb565b5050565b6001820154600090810361096e57506000610320565b6001600160a01b038216600081815260208590526040902054600185018054909190811061099e5761099e610f88565b6000918252602090912001546001600160a01b0316149392505050565b6001600160a01b038116610a225760405162461bcd60e51b815260206004820152602860248201527f556e6f7264657265644b65795365742831303029202d204b65792063616e6e6f604482015267074206265203078360c41b606482015260840161027b565b610a2c8282610958565b15610aab5760405162461bcd60e51b815260206004820152604360248201527f556e6f726465726564416464726573735365742831303129202d20416464726560448201527f737320286b65792920616c72656164792065786973747320696e20746865207360648201526232ba1760e91b608482015260a40161027b565b6001828101805480830182556000828152602090200180546001600160a01b0319166001600160a01b03851617905554610ae59190610f9e565b6001600160a01b039091166000908152602092909252604090912055565b600060208284031215610b1557600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610b4557600080fd5b82356001600160a01b0381168114610b5c57600080fd5b9150602083013567ffffffffffffffff80821115610b7957600080fd5b818501915085601f830112610b8d57600080fd5b813581811115610b9f57610b9f610b1c565b604051601f8201601f19908116603f01168101908382118183101715610bc757610bc7610b1c565b81604052828152886020848701011115610be057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000815180845260005b81811015610c2857602081850181015186830182015201610c0c565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610c5b6020830184610c02565b9392505050565b60008060208385031215610c7557600080fd5b823567ffffffffffffffff80821115610c8d57600080fd5b818501915085601f830112610ca157600080fd5b813581811115610cb057600080fd5b866020828501011115610cc257600080fd5b60209290920196919550909350505050565b602080825282516001600160a01b03168282015282015160606040830152600090610d026080840182610c02565b9050604084015160608401528091505092915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015610d6d57603f19888603018452610d5b858351610c02565b94509285019290850190600101610d3f565b5092979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015610db257835183529284019291840191600101610d96565b50909695505050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561032057610320610dbe565b6001600160a01b0383168152604060208201819052600090610e0b90830184610c02565b949350505050565b600060208284031215610e2557600080fd5b5051919050565b600181811c90821680610e4057607f821691505b60208210810361084a57634e487b7160e01b600052602260045260246000fd5b601f8211156102ea57600081815260208120601f850160051c81016020861015610e875750805b601f850160051c820191505b81811015610ea657828155600101610e93565b505050505050565b67ffffffffffffffff831115610ec657610ec6610b1c565b610eda83610ed48354610e2c565b83610e60565b6000601f841160018114610f0e5760008515610ef65750838201355b600019600387901b1c1916600186901b178355610f68565b600083815260209020601f19861690835b82811015610f3f5786850135825560209485019460019092019101610f1f565b5086821015610f5c5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b600060018201610f8157610f81610dbe565b5060010190565b634e487b7160e01b600052603260045260246000fd5b8181038181111561032057610320610dbe56fea26469706673582212204a4176ba359ac38e81e59c8c29cc87df45ca270aef1e1b93f7ccc577216678de64736f6c63430008100033a264697066735822122058a367aa14efd68c943286c98b8e326e5754f7d5705655b4d6b80523a75f580664736f6c63430008100033"; type GoldenProtocolConstructorParams = | [signer?: Signer] From eb09ced1893a35972ff8cb436db51267ebda06fb Mon Sep 17 00:00:00 2001 From: Dave Hrdlicka Date: Mon, 17 Oct 2022 17:06:20 +0200 Subject: [PATCH 3/8] Fix slither errors --- contracts/GoldenProtocol.sol | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/contracts/GoldenProtocol.sol b/contracts/GoldenProtocol.sol index c6028ec8..78a6ffbb 100644 --- a/contracts/GoldenProtocol.sol +++ b/contracts/GoldenProtocol.sol @@ -10,7 +10,6 @@ contract GoldenProtocol is Ownable { using AddressSet for AddressSet.Set; // This is not going to scale well... how to keep track of questions without this? AddressSet.Set _questions; - string[] entities; uint256 public minimumVotes; constructor(uint256 _minimumVotes) Ownable() { @@ -46,11 +45,10 @@ contract GoldenProtocol is Ownable { } } -contract GoldenProtocolQuestion { +contract GoldenProtocolQuestion is Ownable { using AddressSet for AddressSet.Set; - address public owner; - address public asker; + address public constant asker; uint256 public bounty; bytes16 public subjectUUID; bytes16 public predicateUUID; @@ -81,8 +79,11 @@ contract GoldenProtocolQuestion { bytes16 _subjectUUID, bytes16 _predicateUUID, uint256 _bounty - ) { - owner = _owner; + ) Ownable() { + require( + _asker != address(0), + 'GoldenProtocolQuestion: asker is the zero address' + ); asker = _asker; subjectUUID = _subjectUUID; predicateUUID = _predicateUUID; From b747c3443e9dcce2c2ec0edc468b5f7d23d134f2 Mon Sep 17 00:00:00 2001 From: Dave Hrdlicka Date: Mon, 17 Oct 2022 17:22:05 +0200 Subject: [PATCH 4/8] Fix null checks, answers query --- contracts/GoldenProtocol.sol | 38 +++--- test/GoldenProtocol.ts | 2 +- .../GoldenProtocolQuestion.ts | 124 +++++++++++++++--- .../GoldenProtocolQuestion__factory.ts | 80 +++++++---- .../GoldenProtocol__factory.ts | 2 +- 5 files changed, 185 insertions(+), 61 deletions(-) diff --git a/contracts/GoldenProtocol.sol b/contracts/GoldenProtocol.sol index 78a6ffbb..95c20214 100644 --- a/contracts/GoldenProtocol.sol +++ b/contracts/GoldenProtocol.sol @@ -28,7 +28,6 @@ contract GoldenProtocol is Ownable { // TODO: Creating new contracts is going to be very expensive. // Is there a cheaper alternative to encapsulate the question logic? GoldenProtocolQuestion newQuestion = new GoldenProtocolQuestion( - address(this), msg.sender, subjectUUID, predicateUUID, @@ -48,7 +47,7 @@ contract GoldenProtocol is Ownable { contract GoldenProtocolQuestion is Ownable { using AddressSet for AddressSet.Set; - address public constant asker; + address public asker; uint256 public bounty; bytes16 public subjectUUID; bytes16 public predicateUUID; @@ -74,7 +73,6 @@ contract GoldenProtocolQuestion is Ownable { } constructor( - address _owner, address _asker, bytes16 _subjectUUID, bytes16 _predicateUUID, @@ -84,6 +82,7 @@ contract GoldenProtocolQuestion is Ownable { _asker != address(0), 'GoldenProtocolQuestion: asker is the zero address' ); + asker = _asker; subjectUUID = _subjectUUID; predicateUUID = _predicateUUID; @@ -96,16 +95,26 @@ contract GoldenProtocolQuestion is Ownable { } function addAnswer(string calldata _answer) public { + require( + bytes(_answer).length > 0, + 'GoldenProtocolQuestion: answer is empty' + ); + address answerer = msg.sender; answerByAnswerer[answerer] = _answer; answerers.upsert(answerer); voteCountByAnswerer[answerer] = 0; } - function answers() public view returns (string[] memory) { - string[] memory _answers = new string[](answerers.count()); + function answers() public view returns (Answer[] memory) { + Answer[] memory _answers = new Answer[](answerers.count()); for (uint256 i = 0; i < answerers.count(); i++) { - _answers[i] = answerByAnswerer[answerers.keyAtIndex(i)]; + address answerer = answerers.keyAtIndex(i); + _answers[i] = Answer( + answerer, + answerByAnswerer[answerer], + voteCountByAnswerer[answerer] + ); } return _answers; } @@ -115,6 +124,11 @@ contract GoldenProtocolQuestion is Ownable { answerers.count() > index, 'GoldenProtocolQuestion: there is no answer at that index' ); + require( + answerIndexByVerifier[msg.sender] == 0, + 'GoldenProtocolQuestion: you have already voted' + ); + address answerer = answerers.keyAtIndex(index); address verifier = msg.sender; voteCountByAnswerer[answerer] += 1; @@ -122,14 +136,6 @@ contract GoldenProtocolQuestion is Ownable { verifiers.upsert(verifier); } - function votes() public view returns (uint256[] memory) { - uint256[] memory _votes = new uint256[](answerers.count()); - for (uint256 i = 0; i < answerers.count(); i++) { - _votes[i] = voteCountByAnswerer[answerers.keyAtIndex(i)]; - } - return _votes; - } - function topAnswer() public view returns (Answer memory) { uint256 maxVotes = 0; uint256 maxVotesIndex = 0; @@ -147,11 +153,11 @@ contract GoldenProtocolQuestion is Ownable { // TODO: Pay out the bounty to the best answer, skim a small fee for the voters and protocol function payout() public onlyAsker { Answer memory _topAnswer = topAnswer(); - GoldenProtocol protocol = GoldenProtocol(owner); require( - protocol.minimumVotes() <= _topAnswer.voteCount, + GoldenProtocol(owner()).minimumVotes() <= _topAnswer.voteCount, 'GoldenProtocolQuestion: payout: minimumVotes not met' ); + answer = _topAnswer.answer; address payable answerer = payable(_topAnswer.answerer); answerer.transfer(bounty); } diff --git a/test/GoldenProtocol.ts b/test/GoldenProtocol.ts index e0d7bde5..6df26a6e 100644 --- a/test/GoldenProtocol.ts +++ b/test/GoldenProtocol.ts @@ -92,7 +92,7 @@ describe('GoldenProtocol', function () { verifier.address ); expect(await GoldenProtocolQuestionVerifier.answers()).to.deep.equal([ - answer, + [answerer.address, answer, ethers.BigNumber.from(0)], ]); const transactionVote = await GoldenProtocolQuestionVerifier.upvote(0); const resultVote = await transactionVote.wait(); diff --git a/typechain/contracts/GoldenProtocol.sol/GoldenProtocolQuestion.ts b/typechain/contracts/GoldenProtocol.sol/GoldenProtocolQuestion.ts index ec295085..a21d8cf3 100644 --- a/typechain/contracts/GoldenProtocol.sol/GoldenProtocolQuestion.ts +++ b/typechain/contracts/GoldenProtocol.sol/GoldenProtocolQuestion.ts @@ -13,7 +13,11 @@ import type { Signer, utils, } from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; import type { Listener, Provider } from "@ethersproject/providers"; import type { TypedEventFilter, @@ -47,10 +51,11 @@ export interface GoldenProtocolQuestionInterface extends utils.Interface { "owner()": FunctionFragment; "payout()": FunctionFragment; "predicateUUID()": FunctionFragment; + "renounceOwnership()": FunctionFragment; "subjectUUID()": FunctionFragment; "topAnswer()": FunctionFragment; + "transferOwnership(address)": FunctionFragment; "upvote(uint256)": FunctionFragment; - "votes()": FunctionFragment; }; getFunction( @@ -64,10 +69,11 @@ export interface GoldenProtocolQuestionInterface extends utils.Interface { | "owner" | "payout" | "predicateUUID" + | "renounceOwnership" | "subjectUUID" | "topAnswer" + | "transferOwnership" | "upvote" - | "votes" ): FunctionFragment; encodeFunctionData(functionFragment: "addAnswer", values: [string]): string; @@ -85,16 +91,23 @@ export interface GoldenProtocolQuestionInterface extends utils.Interface { functionFragment: "predicateUUID", values?: undefined ): string; + encodeFunctionData( + functionFragment: "renounceOwnership", + values?: undefined + ): string; encodeFunctionData( functionFragment: "subjectUUID", values?: undefined ): string; encodeFunctionData(functionFragment: "topAnswer", values?: undefined): string; + encodeFunctionData( + functionFragment: "transferOwnership", + values: [string] + ): string; encodeFunctionData( functionFragment: "upvote", values: [BigNumberish] ): string; - encodeFunctionData(functionFragment: "votes", values?: undefined): string; decodeFunctionResult(functionFragment: "addAnswer", data: BytesLike): Result; decodeFunctionResult(functionFragment: "answer", data: BytesLike): Result; @@ -108,17 +121,40 @@ export interface GoldenProtocolQuestionInterface extends utils.Interface { functionFragment: "predicateUUID", data: BytesLike ): Result; + decodeFunctionResult( + functionFragment: "renounceOwnership", + data: BytesLike + ): Result; decodeFunctionResult( functionFragment: "subjectUUID", data: BytesLike ): Result; decodeFunctionResult(functionFragment: "topAnswer", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "transferOwnership", + data: BytesLike + ): Result; decodeFunctionResult(functionFragment: "upvote", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "votes", data: BytesLike): Result; - events: {}; + events: { + "OwnershipTransferred(address,address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; } +export interface OwnershipTransferredEventObject { + previousOwner: string; + newOwner: string; +} +export type OwnershipTransferredEvent = TypedEvent< + [string, string], + OwnershipTransferredEventObject +>; + +export type OwnershipTransferredEventFilter = + TypedEventFilter; + export interface GoldenProtocolQuestion extends BaseContract { connect(signerOrProvider: Signer | Provider | string): this; attach(addressOrName: string): this; @@ -153,7 +189,9 @@ export interface GoldenProtocolQuestion extends BaseContract { answer(overrides?: CallOverrides): Promise<[string]>; - answers(overrides?: CallOverrides): Promise<[string[]]>; + answers( + overrides?: CallOverrides + ): Promise<[GoldenProtocolQuestion.AnswerStructOutput[]]>; asker(overrides?: CallOverrides): Promise<[string]>; @@ -173,18 +211,25 @@ export interface GoldenProtocolQuestion extends BaseContract { predicateUUID(overrides?: CallOverrides): Promise<[string]>; + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + subjectUUID(overrides?: CallOverrides): Promise<[string]>; topAnswer( overrides?: CallOverrides ): Promise<[GoldenProtocolQuestion.AnswerStructOutput]>; + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + upvote( index: BigNumberish, overrides?: Overrides & { from?: string | Promise } ): Promise; - - votes(overrides?: CallOverrides): Promise<[BigNumber[]]>; }; addAnswer( @@ -194,7 +239,9 @@ export interface GoldenProtocolQuestion extends BaseContract { answer(overrides?: CallOverrides): Promise; - answers(overrides?: CallOverrides): Promise; + answers( + overrides?: CallOverrides + ): Promise; asker(overrides?: CallOverrides): Promise; @@ -214,25 +261,34 @@ export interface GoldenProtocolQuestion extends BaseContract { predicateUUID(overrides?: CallOverrides): Promise; + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + subjectUUID(overrides?: CallOverrides): Promise; topAnswer( overrides?: CallOverrides ): Promise; + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + upvote( index: BigNumberish, overrides?: Overrides & { from?: string | Promise } ): Promise; - votes(overrides?: CallOverrides): Promise; - callStatic: { addAnswer(_answer: string, overrides?: CallOverrides): Promise; answer(overrides?: CallOverrides): Promise; - answers(overrides?: CallOverrides): Promise; + answers( + overrides?: CallOverrides + ): Promise; asker(overrides?: CallOverrides): Promise; @@ -250,18 +306,32 @@ export interface GoldenProtocolQuestion extends BaseContract { predicateUUID(overrides?: CallOverrides): Promise; + renounceOwnership(overrides?: CallOverrides): Promise; + subjectUUID(overrides?: CallOverrides): Promise; topAnswer( overrides?: CallOverrides ): Promise; - upvote(index: BigNumberish, overrides?: CallOverrides): Promise; + transferOwnership( + newOwner: string, + overrides?: CallOverrides + ): Promise; - votes(overrides?: CallOverrides): Promise; + upvote(index: BigNumberish, overrides?: CallOverrides): Promise; }; - filters: {}; + filters: { + "OwnershipTransferred(address,address)"( + previousOwner?: string | null, + newOwner?: string | null + ): OwnershipTransferredEventFilter; + OwnershipTransferred( + previousOwner?: string | null, + newOwner?: string | null + ): OwnershipTransferredEventFilter; + }; estimateGas: { addAnswer( @@ -291,16 +361,23 @@ export interface GoldenProtocolQuestion extends BaseContract { predicateUUID(overrides?: CallOverrides): Promise; + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + subjectUUID(overrides?: CallOverrides): Promise; topAnswer(overrides?: CallOverrides): Promise; + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + upvote( index: BigNumberish, overrides?: Overrides & { from?: string | Promise } ): Promise; - - votes(overrides?: CallOverrides): Promise; }; populateTransaction: { @@ -331,15 +408,22 @@ export interface GoldenProtocolQuestion extends BaseContract { predicateUUID(overrides?: CallOverrides): Promise; + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + subjectUUID(overrides?: CallOverrides): Promise; topAnswer(overrides?: CallOverrides): Promise; + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + upvote( index: BigNumberish, overrides?: Overrides & { from?: string | Promise } ): Promise; - - votes(overrides?: CallOverrides): Promise; }; } diff --git a/typechain/factories/contracts/GoldenProtocol.sol/GoldenProtocolQuestion__factory.ts b/typechain/factories/contracts/GoldenProtocol.sol/GoldenProtocolQuestion__factory.ts index af473dc2..b39ea136 100644 --- a/typechain/factories/contracts/GoldenProtocol.sol/GoldenProtocolQuestion__factory.ts +++ b/typechain/factories/contracts/GoldenProtocol.sol/GoldenProtocolQuestion__factory.ts @@ -19,11 +19,6 @@ import type { const _abi = [ { inputs: [ - { - internalType: "address", - name: "_owner", - type: "address", - }, { internalType: "address", name: "_asker", @@ -48,6 +43,25 @@ const _abi = [ stateMutability: "nonpayable", type: "constructor", }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, { inputs: [ { @@ -79,9 +93,26 @@ const _abi = [ name: "answers", outputs: [ { - internalType: "string[]", + components: [ + { + internalType: "address", + name: "answerer", + type: "address", + }, + { + internalType: "string", + name: "answer", + type: "string", + }, + { + internalType: "uint256", + name: "voteCount", + type: "uint256", + }, + ], + internalType: "struct GoldenProtocolQuestion.Answer[]", name: "", - type: "string[]", + type: "tuple[]", }, ], stateMutability: "view", @@ -170,6 +201,13 @@ const _abi = [ stateMutability: "view", type: "function", }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, { inputs: [], name: "subjectUUID", @@ -216,33 +254,33 @@ const _abi = [ { inputs: [ { - internalType: "uint256", - name: "index", - type: "uint256", + internalType: "address", + name: "newOwner", + type: "address", }, ], - name: "upvote", + name: "transferOwnership", outputs: [], stateMutability: "nonpayable", type: "function", }, { - inputs: [], - name: "votes", - outputs: [ + inputs: [ { - internalType: "uint256[]", - name: "", - type: "uint256[]", + internalType: "uint256", + name: "index", + type: "uint256", }, ], - stateMutability: "view", + name: "upvote", + outputs: [], + stateMutability: "nonpayable", type: "function", }, ]; const _bytecode = - "0x608060405234801561001057600080fd5b506040516200110638038062001106833981016040819052610031916100b1565b600080546001600160a01b039687166001600160a01b0319918216179091556001805495909616941693909317909355608092831c600160801b02921c9190911760035560025561010f565b80516001600160a01b038116811461009457600080fd5b919050565b80516001600160801b03198116811461009457600080fd5b600080600080600060a086880312156100c957600080fd5b6100d28661007d565b94506100e06020870161007d565b93506100ee60408701610099565b92506100fc60608701610099565b9150608086015190509295509295909350565b610fe7806200011f6000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c806388fae0e91161008c578063bbe0ba8511610066578063bbe0ba85146101b7578063c7a66eb3146101cb578063e1145e4b146101de578063e168c3ec146101f357600080fd5b806388fae0e91461016e5780638da5cb5b14610183578063943dfef1146101ae57600080fd5b806301ddf070146100d4578063366b2baa146100e957806363bd1d4a1461010f5780637a2faee01461011757806385bb7d691461014657806388775d8f1461015b575b600080fd5b6100e76100e2366004610b03565b610208565b005b6100fc6100f7366004610b32565b6102ef565b6040519081526020015b60405180910390f35b6100e7610326565b6003546101249060801b81565b6040516fffffffffffffffffffffffffffffffff199091168152602001610106565b61014e6104b4565b6040516101069190610c48565b6100e7610169366004610c62565b610542565b610176610584565b6040516101069190610cd4565b600054610196906001600160a01b031681565b6040516001600160a01b039091168152602001610106565b6100fc60025481565b60035461012490600160801b900460801b81565b600154610196906001600160a01b031681565b6101e66106fe565b6040516101069190610d18565b6101fb610850565b6040516101069190610d7a565b60065481106102845760405162461bcd60e51b815260206004820152603860248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a20746865726520697360448201527f206e6f20616e73776572206174207468617420696e646578000000000000000060648201526084015b60405180910390fd5b6000610291600583610909565b6001600160a01b0381166000908152600b6020526040812080549293503392600192906102bf908490610dd4565b90915550506001600160a01b0381166000908152600a602052604090208390556102ea60078261093c565b505050565b60008282604051602001610304929190610de7565b6040516020818303038152906040528051906020012060001c90505b92915050565b6001546001600160a01b0316331461038a5760405162461bcd60e51b815260206004820152602160248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a206f6e6c7941736b656044820152603960f91b606482015260840161027b565b6000610394610584565b6000546040808301518151631901f83560e21b815291519394506001600160a01b03909216928391636407e0d49160048083019260209291908290030181865afa1580156103e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040a9190610e13565b11156104755760405162461bcd60e51b815260206004820152603460248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a207061796f75743a206044820152731b5a5b9a5b5d5b559bdd195cc81b9bdd081b595d60621b606482015260840161027b565b81516002546040516001600160a01b0383169180156108fc02916000818181858888f193505050501580156104ae573d6000803e3d6000fd5b50505050565b600480546104c190610e2c565b80601f01602080910402602001604051908101604052809291908181526020018280546104ed90610e2c565b801561053a5780601f1061050f5761010080835404028352916020019161053a565b820191906000526020600020905b81548152906001019060200180831161051d57829003601f168201915b505050505081565b33600081815260096020526040902061055c838583610eae565b5061056860058261093c565b6001600160a01b03166000908152600b60205260408120555050565b6105b1604051806060016040528060006001600160a01b0316815260200160608152602001600081525090565b60008060005b600654811015610615576000600b816105d1600585610909565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050838110610602578093508192505b508061060d81610f6f565b9150506105b7565b506000610623600583610909565b90506040518060600160405280826001600160a01b0316815260200160096000846001600160a01b03166001600160a01b03168152602001908152602001600020805461066f90610e2c565b80601f016020809104026020016040519081016040528092919081815260200182805461069b90610e2c565b80156106e85780601f106106bd576101008083540402835291602001916106e8565b820191906000526020600020905b8154815290600101906020018083116106cb57829003601f168201915b5050505050815260200184815250935050505090565b60065460609060009067ffffffffffffffff81111561071f5761071f610b1c565b60405190808252806020026020018201604052801561075257816020015b606081526020019060019003908161073d5790505b50905060005b60065481101561084a5760096000610771600584610909565b6001600160a01b03166001600160a01b03168152602001908152602001600020805461079c90610e2c565b80601f01602080910402602001604051908101604052809291908181526020018280546107c890610e2c565b80156108155780601f106107ea57610100808354040283529160200191610815565b820191906000526020600020905b8154815290600101906020018083116107f857829003601f168201915b505050505082828151811061082c5761082c610f88565b6020026020010181905250808061084290610f6f565b915050610758565b50919050565b60065460609060009067ffffffffffffffff81111561087157610871610b1c565b60405190808252806020026020018201604052801561089a578160200160208202803683370190505b50905060005b60065481101561084a57600b60006108b9600584610909565b6001600160a01b03166001600160a01b03168152602001908152602001600020548282815181106108ec576108ec610f88565b60209081029190910101528061090181610f6f565b9150506108a0565b600082600101828154811061092057610920610f88565b6000918252602090912001546001600160a01b03169392505050565b6109468282610958565b6109545761095482826109bb565b5050565b6001820154600090810361096e57506000610320565b6001600160a01b038216600081815260208590526040902054600185018054909190811061099e5761099e610f88565b6000918252602090912001546001600160a01b0316149392505050565b6001600160a01b038116610a225760405162461bcd60e51b815260206004820152602860248201527f556e6f7264657265644b65795365742831303029202d204b65792063616e6e6f604482015267074206265203078360c41b606482015260840161027b565b610a2c8282610958565b15610aab5760405162461bcd60e51b815260206004820152604360248201527f556e6f726465726564416464726573735365742831303129202d20416464726560448201527f737320286b65792920616c72656164792065786973747320696e20746865207360648201526232ba1760e91b608482015260a40161027b565b6001828101805480830182556000828152602090200180546001600160a01b0319166001600160a01b03851617905554610ae59190610f9e565b6001600160a01b039091166000908152602092909252604090912055565b600060208284031215610b1557600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610b4557600080fd5b82356001600160a01b0381168114610b5c57600080fd5b9150602083013567ffffffffffffffff80821115610b7957600080fd5b818501915085601f830112610b8d57600080fd5b813581811115610b9f57610b9f610b1c565b604051601f8201601f19908116603f01168101908382118183101715610bc757610bc7610b1c565b81604052828152886020848701011115610be057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000815180845260005b81811015610c2857602081850181015186830182015201610c0c565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610c5b6020830184610c02565b9392505050565b60008060208385031215610c7557600080fd5b823567ffffffffffffffff80821115610c8d57600080fd5b818501915085601f830112610ca157600080fd5b813581811115610cb057600080fd5b866020828501011115610cc257600080fd5b60209290920196919550909350505050565b602080825282516001600160a01b03168282015282015160606040830152600090610d026080840182610c02565b9050604084015160608401528091505092915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015610d6d57603f19888603018452610d5b858351610c02565b94509285019290850190600101610d3f565b5092979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015610db257835183529284019291840191600101610d96565b50909695505050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561032057610320610dbe565b6001600160a01b0383168152604060208201819052600090610e0b90830184610c02565b949350505050565b600060208284031215610e2557600080fd5b5051919050565b600181811c90821680610e4057607f821691505b60208210810361084a57634e487b7160e01b600052602260045260246000fd5b601f8211156102ea57600081815260208120601f850160051c81016020861015610e875750805b601f850160051c820191505b81811015610ea657828155600101610e93565b505050505050565b67ffffffffffffffff831115610ec657610ec6610b1c565b610eda83610ed48354610e2c565b83610e60565b6000601f841160018114610f0e5760008515610ef65750838201355b600019600387901b1c1916600186901b178355610f68565b600083815260209020601f19861690835b82811015610f3f5786850135825560209485019460019092019101610f1f565b5086821015610f5c5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b600060018201610f8157610f81610dbe565b5060010190565b634e487b7160e01b600052603260045260246000fd5b8181038181111561032057610320610dbe56fea26469706673582212204a4176ba359ac38e81e59c8c29cc87df45ca270aef1e1b93f7ccc577216678de64736f6c63430008100033"; + "0x60806040523480156200001157600080fd5b506040516200144e3803806200144e83398101604081905262000034916200015f565b6200003f33620000f1565b6001600160a01b038416620000b45760405162461bcd60e51b815260206004820152603160248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a2061736b657220697360448201527020746865207a65726f206164647265737360781b606482015260840160405180910390fd5b600180546001600160a01b039095166001600160a01b031990951694909417909355608090811c600160801b0291901c17600355600255620001be565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160801b0319811681146200015a57600080fd5b919050565b600080600080608085870312156200017657600080fd5b84516001600160a01b03811681146200018e57600080fd5b93506200019e6020860162000141565b9250620001ae6040860162000141565b6060959095015193969295505050565b61128080620001ce6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806388fae0e91161008c578063bbe0ba8511610066578063bbe0ba85146101d4578063c7a66eb3146101e8578063e1145e4b146101fb578063f2fde38b1461021057600080fd5b806388fae0e9146101915780638da5cb5b146101a6578063943dfef1146101cb57600080fd5b8063715018a6116100c8578063715018a6146101325780637a2faee01461013a57806385bb7d691461016957806388775d8f1461017e57600080fd5b806301ddf070146100ef578063366b2baa1461010457806363bd1d4a1461012a575b600080fd5b6101026100fd366004610ced565b610223565b005b610117610112366004610d38565b61037e565b6040519081526020015b60405180910390f35b6101026103b5565b610102610554565b6003546101479060801b81565b6040516fffffffffffffffffffffffffffffffff199091168152602001610121565b610171610568565b6040516101219190610e40565b61010261018c366004610e5a565b6105f6565b610199610695565b6040516101219190610f07565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610121565b61011760025481565b60035461014790600160801b900460801b81565b6001546101b3906001600160a01b031681565b61020361080f565b6040516101219190610f1a565b61010261021e366004610f7c565b6109d0565b600654811061029f5760405162461bcd60e51b815260206004820152603860248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a20746865726520697360448201527f206e6f20616e73776572206174207468617420696e646578000000000000000060648201526084015b60405180910390fd5b336000908152600a6020526040902054156103135760405162461bcd60e51b815260206004820152602e60248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a20796f75206861766560448201526d08185b1c9958591e481d9bdd195960921b6064820152608401610296565b6000610320600583610a49565b6001600160a01b0381166000908152600b60205260408120805492935033926001929061034e908490610fad565b90915550506001600160a01b0381166000908152600a60205260409020839055610379600782610a7c565b505050565b60008282604051602001610393929190610fc0565b6040516020818303038152906040528051906020012060001c90505b92915050565b6001546001600160a01b031633146104195760405162461bcd60e51b815260206004820152602160248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a206f6e6c7941736b656044820152603960f91b6064820152608401610296565b6000610423610695565b9050806040015161043c6000546001600160a01b031690565b6001600160a01b0316636407e0d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610479573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049d9190610fec565b11156105085760405162461bcd60e51b815260206004820152603460248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a207061796f75743a206044820152731b5a5b9a5b5d5b559bdd195cc81b9bdd081b595d60621b6064820152608401610296565b602081015160049061051a9082611087565b5080516002546040516001600160a01b0383169180156108fc02916000818181858888f19350505050158015610379573d6000803e3d6000fd5b61055c610a98565b6105666000610af2565b565b6004805461057590611005565b80601f01602080910402602001604051908101604052809291908181526020018280546105a190611005565b80156105ee5780601f106105c3576101008083540402835291602001916105ee565b820191906000526020600020905b8154815290600101906020018083116105d157829003601f168201915b505050505081565b806106535760405162461bcd60e51b815260206004820152602760248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a20616e7377657220696044820152667320656d70747960c81b6064820152608401610296565b33600081815260096020526040902061066d838583611147565b50610679600582610a7c565b6001600160a01b03166000908152600b60205260408120555050565b6106c2604051806060016040528060006001600160a01b0316815260200160608152602001600081525090565b60008060005b600654811015610726576000600b816106e2600585610a49565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050838110610713578093508192505b508061071e81611208565b9150506106c8565b506000610734600583610a49565b90506040518060600160405280826001600160a01b0316815260200160096000846001600160a01b03166001600160a01b03168152602001908152602001600020805461078090611005565b80601f01602080910402602001604051908101604052809291908181526020018280546107ac90611005565b80156107f95780601f106107ce576101008083540402835291602001916107f9565b820191906000526020600020905b8154815290600101906020018083116107dc57829003601f168201915b5050505050815260200184815250935050505090565b60065460609060009067ffffffffffffffff81111561083057610830610d22565b60405190808252806020026020018201604052801561088e57816020015b61087b604051806060016040528060006001600160a01b0316815260200160608152602001600081525090565b81526020019060019003908161084e5790505b50905060005b6006548110156109ca5760006108ab600583610a49565b90506040518060600160405280826001600160a01b0316815260200160096000846001600160a01b03166001600160a01b0316815260200190815260200160002080546108f790611005565b80601f016020809104026020016040519081016040528092919081815260200182805461092390611005565b80156109705780601f1061094557610100808354040283529160200191610970565b820191906000526020600020905b81548152906001019060200180831161095357829003601f168201915b50505091835250506001600160a01b0383166000908152600b602090815260409091205491015283518490849081106109ab576109ab611221565b60200260200101819052505080806109c290611208565b915050610894565b50919050565b6109d8610a98565b6001600160a01b038116610a3d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610296565b610a4681610af2565b50565b6000826001018281548110610a6057610a60611221565b6000918252602090912001546001600160a01b03169392505050565b610a868282610b42565b610a9457610a948282610ba5565b5050565b6000546001600160a01b031633146105665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610296565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60018201546000908103610b58575060006103af565b6001600160a01b0382166000818152602085905260409020546001850180549091908110610b8857610b88611221565b6000918252602090912001546001600160a01b0316149392505050565b6001600160a01b038116610c0c5760405162461bcd60e51b815260206004820152602860248201527f556e6f7264657265644b65795365742831303029202d204b65792063616e6e6f604482015267074206265203078360c41b6064820152608401610296565b610c168282610b42565b15610c955760405162461bcd60e51b815260206004820152604360248201527f556e6f726465726564416464726573735365742831303129202d20416464726560448201527f737320286b65792920616c72656164792065786973747320696e20746865207360648201526232ba1760e91b608482015260a401610296565b6001828101805480830182556000828152602090200180546001600160a01b0319166001600160a01b03851617905554610ccf9190611237565b6001600160a01b039091166000908152602092909252604090912055565b600060208284031215610cff57600080fd5b5035919050565b80356001600160a01b0381168114610d1d57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610d4b57600080fd5b610d5483610d06565b9150602083013567ffffffffffffffff80821115610d7157600080fd5b818501915085601f830112610d8557600080fd5b813581811115610d9757610d97610d22565b604051601f8201601f19908116603f01168101908382118183101715610dbf57610dbf610d22565b81604052828152886020848701011115610dd857600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000815180845260005b81811015610e2057602081850181015186830182015201610e04565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610e536020830184610dfa565b9392505050565b60008060208385031215610e6d57600080fd5b823567ffffffffffffffff80821115610e8557600080fd5b818501915085601f830112610e9957600080fd5b813581811115610ea857600080fd5b866020828501011115610eba57600080fd5b60209290920196919550909350505050565b60018060a01b0381511682526000602082015160606020850152610ef36060850182610dfa565b604093840151949093019390935250919050565b602081526000610e536020830184610ecc565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015610f6f57603f19888603018452610f5d858351610ecc565b94509285019290850190600101610f41565b5092979650505050505050565b600060208284031215610f8e57600080fd5b610e5382610d06565b634e487b7160e01b600052601160045260246000fd5b808201808211156103af576103af610f97565b6001600160a01b0383168152604060208201819052600090610fe490830184610dfa565b949350505050565b600060208284031215610ffe57600080fd5b5051919050565b600181811c9082168061101957607f821691505b6020821081036109ca57634e487b7160e01b600052602260045260246000fd5b601f82111561037957600081815260208120601f850160051c810160208610156110605750805b601f850160051c820191505b8181101561107f5782815560010161106c565b505050505050565b815167ffffffffffffffff8111156110a1576110a1610d22565b6110b5816110af8454611005565b84611039565b602080601f8311600181146110ea57600084156110d25750858301515b600019600386901b1c1916600185901b17855561107f565b600085815260208120601f198616915b82811015611119578886015182559484019460019091019084016110fa565b50858210156111375787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b67ffffffffffffffff83111561115f5761115f610d22565b6111738361116d8354611005565b83611039565b6000601f8411600181146111a7576000851561118f5750838201355b600019600387901b1c1916600186901b178355611201565b600083815260209020601f19861690835b828110156111d857868501358255602094850194600190920191016111b8565b50868210156111f55760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60006001820161121a5761121a610f97565b5060010190565b634e487b7160e01b600052603260045260246000fd5b818103818111156103af576103af610f9756fea264697066735822122015ad514b97df38df80bc6e0db0581076104830cdb35fd709485f7877380c98f664736f6c63430008100033"; type GoldenProtocolQuestionConstructorParams = | [signer?: Signer] @@ -262,7 +300,6 @@ export class GoldenProtocolQuestion__factory extends ContractFactory { } override deploy( - _owner: string, _asker: string, _subjectUUID: BytesLike, _predicateUUID: BytesLike, @@ -270,7 +307,6 @@ export class GoldenProtocolQuestion__factory extends ContractFactory { overrides?: Overrides & { from?: string | Promise } ): Promise { return super.deploy( - _owner, _asker, _subjectUUID, _predicateUUID, @@ -279,7 +315,6 @@ export class GoldenProtocolQuestion__factory extends ContractFactory { ) as Promise; } override getDeployTransaction( - _owner: string, _asker: string, _subjectUUID: BytesLike, _predicateUUID: BytesLike, @@ -287,7 +322,6 @@ export class GoldenProtocolQuestion__factory extends ContractFactory { overrides?: Overrides & { from?: string | Promise } ): TransactionRequest { return super.getDeployTransaction( - _owner, _asker, _subjectUUID, _predicateUUID, diff --git a/typechain/factories/contracts/GoldenProtocol.sol/GoldenProtocol__factory.ts b/typechain/factories/contracts/GoldenProtocol.sol/GoldenProtocol__factory.ts index faa43352..a065e413 100644 --- a/typechain/factories/contracts/GoldenProtocol.sol/GoldenProtocol__factory.ts +++ b/typechain/factories/contracts/GoldenProtocol.sol/GoldenProtocol__factory.ts @@ -150,7 +150,7 @@ const _abi = [ ]; const _bytecode = - "0x608060405234801561001057600080fd5b5060405161181938038061181983398101604081905261002f91610090565b61003833610040565b6004556100a9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100a257600080fd5b5051919050565b611761806100b86000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100bd5780639902b633146100e2578063d6fbfb24146100f5578063f2fde38b1461010857600080fd5b80636407e0d414610082578063715018a61461009e57806377a49821146100a8575b600080fd5b61008b60045481565b6040519081526020015b60405180910390f35b6100a661011b565b005b6100b061012f565b60405161009591906104ff565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610095565b6100a66100f036600461054c565b610193565b6100ca610103366004610582565b6101a0565b6100a66101163660046105be565b61021d565b61012361029b565b61012d60006102f5565b565b60606001800180548060200260200160405190810160405280929190818152602001828054801561018957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161016b575b5050505050905090565b61019b61029b565b600455565b60008030338686866040516101b4906104f2565b6001600160a01b0395861681529490931660208501526001600160801b03199182166040850152166060830152608082015260a001604051809103906000f080158015610205573d6000803e3d6000fd5b50905080610214600182610345565b95945050505050565b61022561029b565b6001600160a01b03811661028f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b610298816102f5565b50565b6000546001600160a01b0316331461012d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610286565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381166103ac5760405162461bcd60e51b815260206004820152602860248201527f556e6f7264657265644b65795365742831303029202d204b65792063616e6e6f604482015267074206265203078360c41b6064820152608401610286565b6103b6828261048d565b156104355760405162461bcd60e51b815260206004820152604360248201527f556e6f726465726564416464726573735365742831303129202d20416464726560448201527f737320286b65792920616c72656164792065786973747320696e20746865207360648201526232ba1760e91b608482015260a401610286565b6001828101805480830182556000828152602090200180546001600160a01b0319166001600160a01b0385161790555461046f91906105ee565b6001600160a01b039091166000908152602092909252604090912055565b600182015460009081036104a3575060006104ec565b6001600160a01b03821660008181526020859052604090205460018501805490919081106104d3576104d361060f565b6000918252602090912001546001600160a01b03161490505b92915050565b6111068061062683390190565b6020808252825182820181905260009190848201906040850190845b818110156105405783516001600160a01b03168352928401929184019160010161051b565b50909695505050505050565b60006020828403121561055e57600080fd5b5035919050565b80356001600160801b03198116811461057d57600080fd5b919050565b60008060006060848603121561059757600080fd5b6105a084610565565b92506105ae60208501610565565b9150604084013590509250925092565b6000602082840312156105d057600080fd5b81356001600160a01b03811681146105e757600080fd5b9392505050565b818103818111156104ec57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fdfe608060405234801561001057600080fd5b506040516200110638038062001106833981016040819052610031916100b1565b600080546001600160a01b039687166001600160a01b0319918216179091556001805495909616941693909317909355608092831c600160801b02921c9190911760035560025561010f565b80516001600160a01b038116811461009457600080fd5b919050565b80516001600160801b03198116811461009457600080fd5b600080600080600060a086880312156100c957600080fd5b6100d28661007d565b94506100e06020870161007d565b93506100ee60408701610099565b92506100fc60608701610099565b9150608086015190509295509295909350565b610fe7806200011f6000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c806388fae0e91161008c578063bbe0ba8511610066578063bbe0ba85146101b7578063c7a66eb3146101cb578063e1145e4b146101de578063e168c3ec146101f357600080fd5b806388fae0e91461016e5780638da5cb5b14610183578063943dfef1146101ae57600080fd5b806301ddf070146100d4578063366b2baa146100e957806363bd1d4a1461010f5780637a2faee01461011757806385bb7d691461014657806388775d8f1461015b575b600080fd5b6100e76100e2366004610b03565b610208565b005b6100fc6100f7366004610b32565b6102ef565b6040519081526020015b60405180910390f35b6100e7610326565b6003546101249060801b81565b6040516fffffffffffffffffffffffffffffffff199091168152602001610106565b61014e6104b4565b6040516101069190610c48565b6100e7610169366004610c62565b610542565b610176610584565b6040516101069190610cd4565b600054610196906001600160a01b031681565b6040516001600160a01b039091168152602001610106565b6100fc60025481565b60035461012490600160801b900460801b81565b600154610196906001600160a01b031681565b6101e66106fe565b6040516101069190610d18565b6101fb610850565b6040516101069190610d7a565b60065481106102845760405162461bcd60e51b815260206004820152603860248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a20746865726520697360448201527f206e6f20616e73776572206174207468617420696e646578000000000000000060648201526084015b60405180910390fd5b6000610291600583610909565b6001600160a01b0381166000908152600b6020526040812080549293503392600192906102bf908490610dd4565b90915550506001600160a01b0381166000908152600a602052604090208390556102ea60078261093c565b505050565b60008282604051602001610304929190610de7565b6040516020818303038152906040528051906020012060001c90505b92915050565b6001546001600160a01b0316331461038a5760405162461bcd60e51b815260206004820152602160248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a206f6e6c7941736b656044820152603960f91b606482015260840161027b565b6000610394610584565b6000546040808301518151631901f83560e21b815291519394506001600160a01b03909216928391636407e0d49160048083019260209291908290030181865afa1580156103e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040a9190610e13565b11156104755760405162461bcd60e51b815260206004820152603460248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a207061796f75743a206044820152731b5a5b9a5b5d5b559bdd195cc81b9bdd081b595d60621b606482015260840161027b565b81516002546040516001600160a01b0383169180156108fc02916000818181858888f193505050501580156104ae573d6000803e3d6000fd5b50505050565b600480546104c190610e2c565b80601f01602080910402602001604051908101604052809291908181526020018280546104ed90610e2c565b801561053a5780601f1061050f5761010080835404028352916020019161053a565b820191906000526020600020905b81548152906001019060200180831161051d57829003601f168201915b505050505081565b33600081815260096020526040902061055c838583610eae565b5061056860058261093c565b6001600160a01b03166000908152600b60205260408120555050565b6105b1604051806060016040528060006001600160a01b0316815260200160608152602001600081525090565b60008060005b600654811015610615576000600b816105d1600585610909565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050838110610602578093508192505b508061060d81610f6f565b9150506105b7565b506000610623600583610909565b90506040518060600160405280826001600160a01b0316815260200160096000846001600160a01b03166001600160a01b03168152602001908152602001600020805461066f90610e2c565b80601f016020809104026020016040519081016040528092919081815260200182805461069b90610e2c565b80156106e85780601f106106bd576101008083540402835291602001916106e8565b820191906000526020600020905b8154815290600101906020018083116106cb57829003601f168201915b5050505050815260200184815250935050505090565b60065460609060009067ffffffffffffffff81111561071f5761071f610b1c565b60405190808252806020026020018201604052801561075257816020015b606081526020019060019003908161073d5790505b50905060005b60065481101561084a5760096000610771600584610909565b6001600160a01b03166001600160a01b03168152602001908152602001600020805461079c90610e2c565b80601f01602080910402602001604051908101604052809291908181526020018280546107c890610e2c565b80156108155780601f106107ea57610100808354040283529160200191610815565b820191906000526020600020905b8154815290600101906020018083116107f857829003601f168201915b505050505082828151811061082c5761082c610f88565b6020026020010181905250808061084290610f6f565b915050610758565b50919050565b60065460609060009067ffffffffffffffff81111561087157610871610b1c565b60405190808252806020026020018201604052801561089a578160200160208202803683370190505b50905060005b60065481101561084a57600b60006108b9600584610909565b6001600160a01b03166001600160a01b03168152602001908152602001600020548282815181106108ec576108ec610f88565b60209081029190910101528061090181610f6f565b9150506108a0565b600082600101828154811061092057610920610f88565b6000918252602090912001546001600160a01b03169392505050565b6109468282610958565b6109545761095482826109bb565b5050565b6001820154600090810361096e57506000610320565b6001600160a01b038216600081815260208590526040902054600185018054909190811061099e5761099e610f88565b6000918252602090912001546001600160a01b0316149392505050565b6001600160a01b038116610a225760405162461bcd60e51b815260206004820152602860248201527f556e6f7264657265644b65795365742831303029202d204b65792063616e6e6f604482015267074206265203078360c41b606482015260840161027b565b610a2c8282610958565b15610aab5760405162461bcd60e51b815260206004820152604360248201527f556e6f726465726564416464726573735365742831303129202d20416464726560448201527f737320286b65792920616c72656164792065786973747320696e20746865207360648201526232ba1760e91b608482015260a40161027b565b6001828101805480830182556000828152602090200180546001600160a01b0319166001600160a01b03851617905554610ae59190610f9e565b6001600160a01b039091166000908152602092909252604090912055565b600060208284031215610b1557600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610b4557600080fd5b82356001600160a01b0381168114610b5c57600080fd5b9150602083013567ffffffffffffffff80821115610b7957600080fd5b818501915085601f830112610b8d57600080fd5b813581811115610b9f57610b9f610b1c565b604051601f8201601f19908116603f01168101908382118183101715610bc757610bc7610b1c565b81604052828152886020848701011115610be057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000815180845260005b81811015610c2857602081850181015186830182015201610c0c565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610c5b6020830184610c02565b9392505050565b60008060208385031215610c7557600080fd5b823567ffffffffffffffff80821115610c8d57600080fd5b818501915085601f830112610ca157600080fd5b813581811115610cb057600080fd5b866020828501011115610cc257600080fd5b60209290920196919550909350505050565b602080825282516001600160a01b03168282015282015160606040830152600090610d026080840182610c02565b9050604084015160608401528091505092915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015610d6d57603f19888603018452610d5b858351610c02565b94509285019290850190600101610d3f565b5092979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015610db257835183529284019291840191600101610d96565b50909695505050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561032057610320610dbe565b6001600160a01b0383168152604060208201819052600090610e0b90830184610c02565b949350505050565b600060208284031215610e2557600080fd5b5051919050565b600181811c90821680610e4057607f821691505b60208210810361084a57634e487b7160e01b600052602260045260246000fd5b601f8211156102ea57600081815260208120601f850160051c81016020861015610e875750805b601f850160051c820191505b81811015610ea657828155600101610e93565b505050505050565b67ffffffffffffffff831115610ec657610ec6610b1c565b610eda83610ed48354610e2c565b83610e60565b6000601f841160018114610f0e5760008515610ef65750838201355b600019600387901b1c1916600186901b178355610f68565b600083815260209020601f19861690835b82811015610f3f5786850135825560209485019460019092019101610f1f565b5086821015610f5c5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b600060018201610f8157610f81610dbe565b5060010190565b634e487b7160e01b600052603260045260246000fd5b8181038181111561032057610320610dbe56fea26469706673582212204a4176ba359ac38e81e59c8c29cc87df45ca270aef1e1b93f7ccc577216678de64736f6c63430008100033a264697066735822122058a367aa14efd68c943286c98b8e326e5754f7d5705655b4d6b80523a75f580664736f6c63430008100033"; + "0x608060405234801561001057600080fd5b50604051611b58380380611b5883398101604081905261002f91610090565b61003833610040565b6003556100a9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100a257600080fd5b5051919050565b611aa0806100b86000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100bd5780639902b633146100e2578063d6fbfb24146100f5578063f2fde38b1461010857600080fd5b80636407e0d414610082578063715018a61461009e57806377a49821146100a8575b600080fd5b61008b60035481565b6040519081526020015b60405180910390f35b6100a661011b565b005b6100b061012f565b60405161009591906104f6565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610095565b6100a66100f0366004610543565b610193565b6100ca610103366004610579565b6101a0565b6100a66101163660046105b5565b610214565b610123610292565b61012d60006102ec565b565b60606001800180548060200260200160405190810160405280929190818152602001828054801561018957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161016b575b5050505050905090565b61019b610292565b600355565b600080338585856040516101b3906104e9565b6001600160a01b0390941684526001600160801b03199283166020850152911660408301526060820152608001604051809103906000f0801580156101fc573d6000803e3d6000fd5b5090508061020b60018261033c565b95945050505050565b61021c610292565b6001600160a01b0381166102865760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61028f816102ec565b50565b6000546001600160a01b0316331461012d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161027d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381166103a35760405162461bcd60e51b815260206004820152602860248201527f556e6f7264657265644b65795365742831303029202d204b65792063616e6e6f604482015267074206265203078360c41b606482015260840161027d565b6103ad8282610484565b1561042c5760405162461bcd60e51b815260206004820152604360248201527f556e6f726465726564416464726573735365742831303129202d20416464726560448201527f737320286b65792920616c72656164792065786973747320696e20746865207360648201526232ba1760e91b608482015260a40161027d565b6001828101805480830182556000828152602090200180546001600160a01b0319166001600160a01b0385161790555461046691906105e5565b6001600160a01b039091166000908152602092909252604090912055565b6001820154600090810361049a575060006104e3565b6001600160a01b03821660008181526020859052604090205460018501805490919081106104ca576104ca610606565b6000918252602090912001546001600160a01b03161490505b92915050565b61144e8061061d83390190565b6020808252825182820181905260009190848201906040850190845b818110156105375783516001600160a01b031683529284019291840191600101610512565b50909695505050505050565b60006020828403121561055557600080fd5b5035919050565b80356001600160801b03198116811461057457600080fd5b919050565b60008060006060848603121561058e57600080fd5b6105978461055c565b92506105a56020850161055c565b9150604084013590509250925092565b6000602082840312156105c757600080fd5b81356001600160a01b03811681146105de57600080fd5b9392505050565b818103818111156104e357634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fdfe60806040523480156200001157600080fd5b506040516200144e3803806200144e83398101604081905262000034916200015f565b6200003f33620000f1565b6001600160a01b038416620000b45760405162461bcd60e51b815260206004820152603160248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a2061736b657220697360448201527020746865207a65726f206164647265737360781b606482015260840160405180910390fd5b600180546001600160a01b039095166001600160a01b031990951694909417909355608090811c600160801b0291901c17600355600255620001be565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160801b0319811681146200015a57600080fd5b919050565b600080600080608085870312156200017657600080fd5b84516001600160a01b03811681146200018e57600080fd5b93506200019e6020860162000141565b9250620001ae6040860162000141565b6060959095015193969295505050565b61128080620001ce6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806388fae0e91161008c578063bbe0ba8511610066578063bbe0ba85146101d4578063c7a66eb3146101e8578063e1145e4b146101fb578063f2fde38b1461021057600080fd5b806388fae0e9146101915780638da5cb5b146101a6578063943dfef1146101cb57600080fd5b8063715018a6116100c8578063715018a6146101325780637a2faee01461013a57806385bb7d691461016957806388775d8f1461017e57600080fd5b806301ddf070146100ef578063366b2baa1461010457806363bd1d4a1461012a575b600080fd5b6101026100fd366004610ced565b610223565b005b610117610112366004610d38565b61037e565b6040519081526020015b60405180910390f35b6101026103b5565b610102610554565b6003546101479060801b81565b6040516fffffffffffffffffffffffffffffffff199091168152602001610121565b610171610568565b6040516101219190610e40565b61010261018c366004610e5a565b6105f6565b610199610695565b6040516101219190610f07565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610121565b61011760025481565b60035461014790600160801b900460801b81565b6001546101b3906001600160a01b031681565b61020361080f565b6040516101219190610f1a565b61010261021e366004610f7c565b6109d0565b600654811061029f5760405162461bcd60e51b815260206004820152603860248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a20746865726520697360448201527f206e6f20616e73776572206174207468617420696e646578000000000000000060648201526084015b60405180910390fd5b336000908152600a6020526040902054156103135760405162461bcd60e51b815260206004820152602e60248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a20796f75206861766560448201526d08185b1c9958591e481d9bdd195960921b6064820152608401610296565b6000610320600583610a49565b6001600160a01b0381166000908152600b60205260408120805492935033926001929061034e908490610fad565b90915550506001600160a01b0381166000908152600a60205260409020839055610379600782610a7c565b505050565b60008282604051602001610393929190610fc0565b6040516020818303038152906040528051906020012060001c90505b92915050565b6001546001600160a01b031633146104195760405162461bcd60e51b815260206004820152602160248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a206f6e6c7941736b656044820152603960f91b6064820152608401610296565b6000610423610695565b9050806040015161043c6000546001600160a01b031690565b6001600160a01b0316636407e0d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610479573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049d9190610fec565b11156105085760405162461bcd60e51b815260206004820152603460248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a207061796f75743a206044820152731b5a5b9a5b5d5b559bdd195cc81b9bdd081b595d60621b6064820152608401610296565b602081015160049061051a9082611087565b5080516002546040516001600160a01b0383169180156108fc02916000818181858888f19350505050158015610379573d6000803e3d6000fd5b61055c610a98565b6105666000610af2565b565b6004805461057590611005565b80601f01602080910402602001604051908101604052809291908181526020018280546105a190611005565b80156105ee5780601f106105c3576101008083540402835291602001916105ee565b820191906000526020600020905b8154815290600101906020018083116105d157829003601f168201915b505050505081565b806106535760405162461bcd60e51b815260206004820152602760248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a20616e7377657220696044820152667320656d70747960c81b6064820152608401610296565b33600081815260096020526040902061066d838583611147565b50610679600582610a7c565b6001600160a01b03166000908152600b60205260408120555050565b6106c2604051806060016040528060006001600160a01b0316815260200160608152602001600081525090565b60008060005b600654811015610726576000600b816106e2600585610a49565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050838110610713578093508192505b508061071e81611208565b9150506106c8565b506000610734600583610a49565b90506040518060600160405280826001600160a01b0316815260200160096000846001600160a01b03166001600160a01b03168152602001908152602001600020805461078090611005565b80601f01602080910402602001604051908101604052809291908181526020018280546107ac90611005565b80156107f95780601f106107ce576101008083540402835291602001916107f9565b820191906000526020600020905b8154815290600101906020018083116107dc57829003601f168201915b5050505050815260200184815250935050505090565b60065460609060009067ffffffffffffffff81111561083057610830610d22565b60405190808252806020026020018201604052801561088e57816020015b61087b604051806060016040528060006001600160a01b0316815260200160608152602001600081525090565b81526020019060019003908161084e5790505b50905060005b6006548110156109ca5760006108ab600583610a49565b90506040518060600160405280826001600160a01b0316815260200160096000846001600160a01b03166001600160a01b0316815260200190815260200160002080546108f790611005565b80601f016020809104026020016040519081016040528092919081815260200182805461092390611005565b80156109705780601f1061094557610100808354040283529160200191610970565b820191906000526020600020905b81548152906001019060200180831161095357829003601f168201915b50505091835250506001600160a01b0383166000908152600b602090815260409091205491015283518490849081106109ab576109ab611221565b60200260200101819052505080806109c290611208565b915050610894565b50919050565b6109d8610a98565b6001600160a01b038116610a3d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610296565b610a4681610af2565b50565b6000826001018281548110610a6057610a60611221565b6000918252602090912001546001600160a01b03169392505050565b610a868282610b42565b610a9457610a948282610ba5565b5050565b6000546001600160a01b031633146105665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610296565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60018201546000908103610b58575060006103af565b6001600160a01b0382166000818152602085905260409020546001850180549091908110610b8857610b88611221565b6000918252602090912001546001600160a01b0316149392505050565b6001600160a01b038116610c0c5760405162461bcd60e51b815260206004820152602860248201527f556e6f7264657265644b65795365742831303029202d204b65792063616e6e6f604482015267074206265203078360c41b6064820152608401610296565b610c168282610b42565b15610c955760405162461bcd60e51b815260206004820152604360248201527f556e6f726465726564416464726573735365742831303129202d20416464726560448201527f737320286b65792920616c72656164792065786973747320696e20746865207360648201526232ba1760e91b608482015260a401610296565b6001828101805480830182556000828152602090200180546001600160a01b0319166001600160a01b03851617905554610ccf9190611237565b6001600160a01b039091166000908152602092909252604090912055565b600060208284031215610cff57600080fd5b5035919050565b80356001600160a01b0381168114610d1d57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610d4b57600080fd5b610d5483610d06565b9150602083013567ffffffffffffffff80821115610d7157600080fd5b818501915085601f830112610d8557600080fd5b813581811115610d9757610d97610d22565b604051601f8201601f19908116603f01168101908382118183101715610dbf57610dbf610d22565b81604052828152886020848701011115610dd857600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000815180845260005b81811015610e2057602081850181015186830182015201610e04565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610e536020830184610dfa565b9392505050565b60008060208385031215610e6d57600080fd5b823567ffffffffffffffff80821115610e8557600080fd5b818501915085601f830112610e9957600080fd5b813581811115610ea857600080fd5b866020828501011115610eba57600080fd5b60209290920196919550909350505050565b60018060a01b0381511682526000602082015160606020850152610ef36060850182610dfa565b604093840151949093019390935250919050565b602081526000610e536020830184610ecc565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015610f6f57603f19888603018452610f5d858351610ecc565b94509285019290850190600101610f41565b5092979650505050505050565b600060208284031215610f8e57600080fd5b610e5382610d06565b634e487b7160e01b600052601160045260246000fd5b808201808211156103af576103af610f97565b6001600160a01b0383168152604060208201819052600090610fe490830184610dfa565b949350505050565b600060208284031215610ffe57600080fd5b5051919050565b600181811c9082168061101957607f821691505b6020821081036109ca57634e487b7160e01b600052602260045260246000fd5b601f82111561037957600081815260208120601f850160051c810160208610156110605750805b601f850160051c820191505b8181101561107f5782815560010161106c565b505050505050565b815167ffffffffffffffff8111156110a1576110a1610d22565b6110b5816110af8454611005565b84611039565b602080601f8311600181146110ea57600084156110d25750858301515b600019600386901b1c1916600185901b17855561107f565b600085815260208120601f198616915b82811015611119578886015182559484019460019091019084016110fa565b50858210156111375787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b67ffffffffffffffff83111561115f5761115f610d22565b6111738361116d8354611005565b83611039565b6000601f8411600181146111a7576000851561118f5750838201355b600019600387901b1c1916600186901b178355611201565b600083815260209020601f19861690835b828110156111d857868501358255602094850194600190920191016111b8565b50868210156111f55760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60006001820161121a5761121a610f97565b5060010190565b634e487b7160e01b600052603260045260246000fd5b818103818111156103af576103af610f9756fea264697066735822122015ad514b97df38df80bc6e0db0581076104830cdb35fd709485f7877380c98f664736f6c63430008100033a2646970667358221220ca1979ea90d95ff33915b8b5a81885840e536d9bed73d193716a6d0a05b9840e64736f6c63430008100033"; type GoldenProtocolConstructorParams = | [signer?: Signer] From fa587689658b8fe557361d82b71df93605410c4b Mon Sep 17 00:00:00 2001 From: Dave Hrdlicka Date: Tue, 18 Oct 2022 15:14:19 +0200 Subject: [PATCH 5/8] Hook up ERC20 token and payout fnction --- contracts/GoldenProtocol.sol | 72 +++++-- contracts/GoldenToken.sol | 14 +- contracts/libraries/AddressSet.sol | 8 + ...oldenProtocol.ts => 999_GoldenProtocol.ts} | 5 +- test/GoldenProtocol.ts | 195 +++++++++++++----- test/utils/index.ts | 6 +- .../GoldenProtocol.sol/GoldenProtocol.ts | 39 ++-- .../GoldenProtocolQuestion.ts | 28 +++ .../GoldenProtocolQuestion__factory.ts | 48 ++++- .../GoldenProtocol__factory.ts | 54 +++-- .../contracts/GoldenToken__factory.ts | 2 +- 11 files changed, 352 insertions(+), 119 deletions(-) rename deploy/{0_GoldenProtocol.ts => 999_GoldenProtocol.ts} (76%) diff --git a/contracts/GoldenProtocol.sol b/contracts/GoldenProtocol.sol index 95c20214..dea0b213 100644 --- a/contracts/GoldenProtocol.sol +++ b/contracts/GoldenProtocol.sol @@ -2,17 +2,25 @@ pragma solidity ^0.8.16; import '@openzeppelin/contracts/access/Ownable.sol'; +import '@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol'; +import './GoldenToken.sol'; import './libraries/AddressSet.sol'; /// @custom:security-contact security@golden.com contract GoldenProtocol is Ownable { - using AddressSet for AddressSet.Set; - // This is not going to scale well... how to keep track of questions without this? - AddressSet.Set _questions; + using SafeERC20Upgradeable for GoldenToken; + GoldenToken tokenContract; uint256 public minimumVotes; - constructor(uint256 _minimumVotes) Ownable() { + event QuestionCreated( + address indexed questionAddress, + bytes16 subjectUUID, + bytes16 predicateUUID + ); + + constructor(address goldenTokenAddress, uint256 _minimumVotes) Ownable() { + tokenContract = GoldenToken(goldenTokenAddress); minimumVotes = _minimumVotes; } @@ -25,30 +33,37 @@ contract GoldenProtocol is Ownable { bytes16 predicateUUID, uint256 bounty ) public returns (address) { + require( + tokenContract.allowance(_msgSender(), address(this)) >= bounty, + 'GoldenProtocol: insufficient allowance' + ); + // TODO: Creating new contracts is going to be very expensive. // Is there a cheaper alternative to encapsulate the question logic? GoldenProtocolQuestion newQuestion = new GoldenProtocolQuestion( + address(tokenContract), msg.sender, subjectUUID, - predicateUUID, - bounty + predicateUUID ); address newQuestionAddress = address(newQuestion); - _questions.insert(newQuestionAddress); + tokenContract.safeTransferFrom( + _msgSender(), + newQuestionAddress, + bounty + ); + emit QuestionCreated(newQuestionAddress, subjectUUID, predicateUUID); return newQuestionAddress; } - - // TODO: This is not going to scale well... how to keep track of questions without this? - function questions() public view returns (address[] memory) { - return _questions.keyList; - } } contract GoldenProtocolQuestion is Ownable { + using SafeERC20Upgradeable for GoldenToken; + GoldenToken tokenContract; + using AddressSet for AddressSet.Set; address public asker; - uint256 public bounty; bytes16 public subjectUUID; bytes16 public predicateUUID; string public answer; @@ -72,21 +87,27 @@ contract GoldenProtocolQuestion is Ownable { uint256 voteCount; } + event AnswerAdded( + bytes16 subjectUUID, + bytes16 predicateUUID, + string answer, + uint256 index + ); + constructor( + address goldenTokenAddress, address _asker, bytes16 _subjectUUID, - bytes16 _predicateUUID, - uint256 _bounty + bytes16 _predicateUUID ) Ownable() { require( _asker != address(0), 'GoldenProtocolQuestion: asker is the zero address' ); - + tokenContract = GoldenToken(goldenTokenAddress); asker = _asker; subjectUUID = _subjectUUID; predicateUUID = _predicateUUID; - bounty = _bounty; } modifier onlyAsker() { @@ -94,6 +115,10 @@ contract GoldenProtocolQuestion is Ownable { _; } + function bounty() public view returns (uint256) { + return tokenContract.balanceOf(address(this)); + } + function addAnswer(string calldata _answer) public { require( bytes(_answer).length > 0, @@ -104,6 +129,12 @@ contract GoldenProtocolQuestion is Ownable { answerByAnswerer[answerer] = _answer; answerers.upsert(answerer); voteCountByAnswerer[answerer] = 0; + emit AnswerAdded( + subjectUUID, + predicateUUID, + _answer, + answerers.indexOfKey(answerer) + ); } function answers() public view returns (Answer[] memory) { @@ -150,7 +181,6 @@ contract GoldenProtocolQuestion is Ownable { return (Answer(answerer, answerByAnswerer[answerer], maxVotes)); } - // TODO: Pay out the bounty to the best answer, skim a small fee for the voters and protocol function payout() public onlyAsker { Answer memory _topAnswer = topAnswer(); require( @@ -159,7 +189,11 @@ contract GoldenProtocolQuestion is Ownable { ); answer = _topAnswer.answer; address payable answerer = payable(_topAnswer.answerer); - answerer.transfer(bounty); + tokenContract.safeTransfer( + answerer, + // TODO: Skim a small fee for the voters and protocol + tokenContract.balanceOf(address(this)) + ); } // Utils diff --git a/contracts/GoldenToken.sol b/contracts/GoldenToken.sol index 57b229c7..e2645195 100644 --- a/contracts/GoldenToken.sol +++ b/contracts/GoldenToken.sol @@ -28,13 +28,13 @@ contract GoldenToken is ) internal override { super._beforeTokenTransfer(from, to, amount); - require( - (from == address(0) || - from == owner() || - from == address(this) || - to == address(this)), - 'ERC20: Not allowed to transfer' - ); + // require( + // (from == address(0) || + // from == owner() || + // from == address(this) || + // to == address(this)), + // 'ERC20: Not allowed to transfer' + // ); } // ============ Staking ============ diff --git a/contracts/libraries/AddressSet.sol b/contracts/libraries/AddressSet.sol index fac06d8c..3b7efc9a 100644 --- a/contracts/libraries/AddressSet.sol +++ b/contracts/libraries/AddressSet.sol @@ -58,4 +58,12 @@ library AddressSet { { return self.keyList[index]; } + + function indexOfKey(Set storage self, address key) + internal + view + returns (uint256) + { + return self.keyPointers[key]; + } } diff --git a/deploy/0_GoldenProtocol.ts b/deploy/999_GoldenProtocol.ts similarity index 76% rename from deploy/0_GoldenProtocol.ts rename to deploy/999_GoldenProtocol.ts index 3cc5aede..a1d62c1a 100644 --- a/deploy/0_GoldenProtocol.ts +++ b/deploy/999_GoldenProtocol.ts @@ -6,15 +6,18 @@ const deploy: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { const { deployer } = await getNamedAccounts(); + const GoldenTokenDeployment = await deployments.get('GoldenToken'); + await deployments.deploy('GoldenProtocol', { from: deployer, // skipIfAlreadyDeployed: true, - args: [3], + args: [GoldenTokenDeployment.address, 3], log: true, }); }; deploy.id = 'deploy_golden_protocol'; deploy.tags = ['GoldenProtocol']; +deploy.dependencies = ['GoldenToken']; export default deploy; diff --git a/test/GoldenProtocol.ts b/test/GoldenProtocol.ts index 6df26a6e..7b730d78 100644 --- a/test/GoldenProtocol.ts +++ b/test/GoldenProtocol.ts @@ -12,23 +12,38 @@ import { GoldenProtocol as GoldenProtocolContract, GoldenProtocolQuestion as GoldenProtocolQuestionContract, } from '../typechain/contracts/GoldenProtocol.sol'; +import { QuestionCreatedEvent } from '../typechain/contracts/GoldenProtocol.sol/GoldenProtocol'; +import { AnswerAddedEvent } from '../typechain/contracts/GoldenProtocol.sol/GoldenProtocolQuestion'; +import { GoldenToken as GoldenTokenContract } from '../typechain/'; -type Contracts = Pick<_Contracts, 'GoldenProtocol'>; +type Contracts = Pick< + _Contracts, + 'GoldenProtocol' | 'GoldenProtocolQuestion' | 'GoldenToken' +>; describe('GoldenProtocol', function () { let GoldenProtocol: Contracts['GoldenProtocol']; + let GoldenToken: Contracts['GoldenToken']; let owner: User; let users: User[]; + let asker: User; + let answerer: User; + let verifier: User; + const answer = 'Profound truth'; beforeEach(async function () { await deployments.fixture(['GoldenProtocol']); GoldenProtocol = await ethers.getContract( 'GoldenProtocol' ); - const contracts = { GoldenProtocol }; + GoldenToken = await ethers.getContract('GoldenToken'); + const contracts = { GoldenProtocol, GoldenToken }; const { deployer } = await getNamedAccounts(); owner = await setupUser(deployer, contracts); users = await setupUsers(await getUnnamedAccounts(), contracts); + asker = users[0]; + answerer = users[1]; + verifier = users[2]; }); describe('Deployment', function () { @@ -37,71 +52,147 @@ describe('GoldenProtocol', function () { }); }); - describe('Protocol', function () { - it('asker can ask a question, answerer can answer, verifier can vote', async function () { - const subjectUUID = getRandomBytesHexString(16); - const predicateUUID = getRandomBytesHexString(16); - const bounty = 10; - const answer = 'Profound truth'; + describe('Question', function () { + const subjectUUID = getRandomBytesHexString(16); + const predicateUUID = getRandomBytesHexString(16); + const bounty = ethers.BigNumber.from(10); + let GoldenProtocolQuestion: NonNullable< + Contracts['GoldenProtocolQuestion'] + >; - const asker = users[0]; - const answerer = users[1]; - const verifier = users[2]; - - // Ask question + beforeEach(async function () { + // Create question + const anskerBalanceBefore = await GoldenToken.balanceOf(asker.address); + await asker.GoldenToken.approve(GoldenProtocol.address, bounty); const transactionQuestion = await asker.GoldenProtocol.createQuestion( subjectUUID, predicateUUID, bounty ); - const resultQuestion = await transactionQuestion.wait(); - expect(resultQuestion.status).to.equal(1); - - // Answer it - const questionAddresses = await answerer.GoldenProtocol.questions(); - const GoldenProtocolQuestionAnswerer = + const result = await transactionQuestion.wait(); + expect(result.status).to.equal(1); + expect(await GoldenToken.balanceOf(asker.address)).to.equal( + anskerBalanceBefore.sub(bounty) + ); + const createQuestionEvent = ( + await GoldenProtocol.queryFilter( + GoldenProtocol.filters.QuestionCreated() + ) + )[0]; + GoldenProtocolQuestion = await ethers.getContractAt( 'GoldenProtocolQuestion', - questionAddresses[0], - answerer.address + createQuestionEvent.args.questionAddress ); - expect(await GoldenProtocolQuestionAnswerer.owner()).to.equal( + expect( + await GoldenToken.balanceOf(createQuestionEvent.args.questionAddress) + ).to.equal(bounty); + }); + + it('emits event when question is created', async function () { + const createQuestionEvent = ( + await GoldenProtocol.queryFilter( + GoldenProtocol.filters.QuestionCreated() + ) + )[0]; + expect(createQuestionEvent.args.subjectUUID).to.equal(subjectUUID); + expect(createQuestionEvent.args.predicateUUID).to.equal(predicateUUID); + }); + + it('has correct and accessible state', async function () { + expect(await GoldenProtocolQuestion.owner()).to.equal( GoldenProtocol.address ); - expect(await GoldenProtocolQuestionAnswerer.asker()).to.equal( - asker.address - ); - expect(await GoldenProtocolQuestionAnswerer.subjectUUID()).to.equal( - subjectUUID - ); - expect(await GoldenProtocolQuestionAnswerer.predicateUUID()).to.equal( + expect(await GoldenProtocolQuestion.asker()).to.equal(asker.address); + expect(await GoldenProtocolQuestion.subjectUUID()).to.equal(subjectUUID); + expect(await GoldenProtocolQuestion.predicateUUID()).to.equal( predicateUUID ); - expect(await GoldenProtocolQuestionAnswerer.bounty()).to.equal(bounty); - const transactionAnswer = await GoldenProtocolQuestionAnswerer.addAnswer( - answer - ); - const resultAnswer = await transactionAnswer.wait(); - expect(resultAnswer.status).to.equal(1); + expect(await GoldenProtocolQuestion.bounty()).to.equal(bounty); + }); - // Verify it - const GoldenProtocolQuestionVerifier = - await ethers.getContractAt( - 'GoldenProtocolQuestion', - questionAddresses[0], - verifier.address + describe('Answer', function () { + async function upvote() { + const transactionVote = await GoldenProtocolQuestion.connect( + await ethers.getSigner(verifier.address) + ).upvote(0); + const resultVote = await transactionVote.wait(); + expect(resultVote.status).to.equal(1); + } + + beforeEach(async function () { + // Create answer + const transactionAnswer = await GoldenProtocolQuestion.connect( + await ethers.getSigner(answerer.address) + ).addAnswer(answer); + const resultAnswer = await transactionAnswer.wait(); + expect(resultAnswer.status).to.equal(1); + }); + + it('emits event when answer is added', async function () { + expect(await GoldenProtocolQuestion.answers()).to.deep.equal([ + [answerer.address, answer, ethers.BigNumber.from(0)], + ]); + const addAnswerEvent = ( + await GoldenProtocolQuestion.queryFilter( + GoldenProtocolQuestion.filters.AnswerAdded() + ) + )[0]; + expect(addAnswerEvent.args.subjectUUID).to.equal(subjectUUID); + expect(addAnswerEvent.args.predicateUUID).to.equal(predicateUUID); + expect(addAnswerEvent.args.answer).to.equal(answer); + expect(addAnswerEvent.args.index).to.equal(ethers.BigNumber.from(0)); + }); + + it('can be voted on', async function () { + await upvote(); + const topAnswer = await GoldenProtocolQuestion.topAnswer(); + expect(topAnswer.answerer).to.equal(answerer.address); + expect(topAnswer.answer).to.equal(answer); + expect(topAnswer.voteCount).to.equal(ethers.BigNumber.from(1)); + }); + + it('can not be voted on multiple times', async function () { + await upvote(); + expect( + GoldenProtocolQuestion.connect( + await ethers.getSigner(verifier.address) + ).upvote(0) + ).to.be.revertedWith('GoldenProtocolQuestion: you have already voted'); + }); + + it('can not be payed out without enough votes', async function () { + await upvote(); + expect( + GoldenProtocolQuestion.connect( + await ethers.getSigner(asker.address) + ).payout() + ).to.be.revertedWith( + 'GoldenProtocolQuestion: payout: minimumVotes not met' + ); + }); + + it('can be payed out', async function () { + await upvote(); + expect(asker.GoldenProtocol.setMinimumVotes(1)).to.be.revertedWith( + 'Ownable: caller is not the owner' + ); + await owner.GoldenProtocol.setMinimumVotes(1); + const answererBalanceBefore = await GoldenToken.balanceOf( + answerer.address + ); + const transactionPayout = await GoldenProtocolQuestion.connect( + await ethers.getSigner(asker.address) + ).payout(); + const resultPayout = await transactionPayout.wait(); + expect(resultPayout.status).to.equal(1); + expect( + await GoldenToken.balanceOf(GoldenProtocolQuestion.address) + ).to.equal(0); + expect(await GoldenToken.balanceOf(answerer.address)).to.equal( + answererBalanceBefore.add(bounty) ); - expect(await GoldenProtocolQuestionVerifier.answers()).to.deep.equal([ - [answerer.address, answer, ethers.BigNumber.from(0)], - ]); - const transactionVote = await GoldenProtocolQuestionVerifier.upvote(0); - const resultVote = await transactionVote.wait(); - expect(resultVote.status).to.equal(1); - - const topAnswer = await GoldenProtocolQuestionVerifier.topAnswer(); - expect(topAnswer.answerer).to.equal(answerer.address); - expect(topAnswer.answer).to.equal(answer); - expect(topAnswer.voteCount).to.equal(ethers.BigNumber.from(1)); + }); }); }); }); diff --git a/test/utils/index.ts b/test/utils/index.ts index a5dd88d5..3c88c220 100644 --- a/test/utils/index.ts +++ b/test/utils/index.ts @@ -5,13 +5,17 @@ import { Address } from 'hardhat-deploy/types'; import type { GoldenSchemaGovernor } from '../../typechain/contracts/GoldenSchemaGovernor'; import type { GoldenSchema } from '../../typechain/contracts/GoldenSchema'; import type { GoldenToken } from '../../typechain/contracts/GoldenToken'; -import type { GoldenProtocol } from '../../typechain/contracts/GoldenProtocol.sol'; +import type { + GoldenProtocol, + GoldenProtocolQuestion, +} from '../../typechain/contracts/GoldenProtocol.sol'; export type Contracts = { GoldenSchemaGovernor: GoldenSchemaGovernor; GoldenSchema: GoldenSchema; GoldenToken: GoldenToken; GoldenProtocol: GoldenProtocol; + GoldenProtocolQuestion?: GoldenProtocolQuestion; }; export type User = { address: Address } & T; diff --git a/typechain/contracts/GoldenProtocol.sol/GoldenProtocol.ts b/typechain/contracts/GoldenProtocol.sol/GoldenProtocol.ts index 08ca7067..d16dd291 100644 --- a/typechain/contracts/GoldenProtocol.sol/GoldenProtocol.ts +++ b/typechain/contracts/GoldenProtocol.sol/GoldenProtocol.ts @@ -31,7 +31,6 @@ export interface GoldenProtocolInterface extends utils.Interface { "createQuestion(bytes16,bytes16,uint256)": FunctionFragment; "minimumVotes()": FunctionFragment; "owner()": FunctionFragment; - "questions()": FunctionFragment; "renounceOwnership()": FunctionFragment; "setMinimumVotes(uint256)": FunctionFragment; "transferOwnership(address)": FunctionFragment; @@ -42,7 +41,6 @@ export interface GoldenProtocolInterface extends utils.Interface { | "createQuestion" | "minimumVotes" | "owner" - | "questions" | "renounceOwnership" | "setMinimumVotes" | "transferOwnership" @@ -57,7 +55,6 @@ export interface GoldenProtocolInterface extends utils.Interface { values?: undefined ): string; encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData(functionFragment: "questions", values?: undefined): string; encodeFunctionData( functionFragment: "renounceOwnership", values?: undefined @@ -80,7 +77,6 @@ export interface GoldenProtocolInterface extends utils.Interface { data: BytesLike ): Result; decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "questions", data: BytesLike): Result; decodeFunctionResult( functionFragment: "renounceOwnership", data: BytesLike @@ -96,9 +92,11 @@ export interface GoldenProtocolInterface extends utils.Interface { events: { "OwnershipTransferred(address,address)": EventFragment; + "QuestionCreated(address,bytes16,bytes16)": EventFragment; }; getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; + getEvent(nameOrSignatureOrTopic: "QuestionCreated"): EventFragment; } export interface OwnershipTransferredEventObject { @@ -113,6 +111,18 @@ export type OwnershipTransferredEvent = TypedEvent< export type OwnershipTransferredEventFilter = TypedEventFilter; +export interface QuestionCreatedEventObject { + questionAddress: string; + subjectUUID: string; + predicateUUID: string; +} +export type QuestionCreatedEvent = TypedEvent< + [string, string, string], + QuestionCreatedEventObject +>; + +export type QuestionCreatedEventFilter = TypedEventFilter; + export interface GoldenProtocol extends BaseContract { connect(signerOrProvider: Signer | Provider | string): this; attach(addressOrName: string): this; @@ -151,8 +161,6 @@ export interface GoldenProtocol extends BaseContract { owner(overrides?: CallOverrides): Promise<[string]>; - questions(overrides?: CallOverrides): Promise<[string[]]>; - renounceOwnership( overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -179,8 +187,6 @@ export interface GoldenProtocol extends BaseContract { owner(overrides?: CallOverrides): Promise; - questions(overrides?: CallOverrides): Promise; - renounceOwnership( overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -207,8 +213,6 @@ export interface GoldenProtocol extends BaseContract { owner(overrides?: CallOverrides): Promise; - questions(overrides?: CallOverrides): Promise; - renounceOwnership(overrides?: CallOverrides): Promise; setMinimumVotes( @@ -231,6 +235,17 @@ export interface GoldenProtocol extends BaseContract { previousOwner?: string | null, newOwner?: string | null ): OwnershipTransferredEventFilter; + + "QuestionCreated(address,bytes16,bytes16)"( + questionAddress?: string | null, + subjectUUID?: null, + predicateUUID?: null + ): QuestionCreatedEventFilter; + QuestionCreated( + questionAddress?: string | null, + subjectUUID?: null, + predicateUUID?: null + ): QuestionCreatedEventFilter; }; estimateGas: { @@ -245,8 +260,6 @@ export interface GoldenProtocol extends BaseContract { owner(overrides?: CallOverrides): Promise; - questions(overrides?: CallOverrides): Promise; - renounceOwnership( overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -274,8 +287,6 @@ export interface GoldenProtocol extends BaseContract { owner(overrides?: CallOverrides): Promise; - questions(overrides?: CallOverrides): Promise; - renounceOwnership( overrides?: Overrides & { from?: string | Promise } ): Promise; diff --git a/typechain/contracts/GoldenProtocol.sol/GoldenProtocolQuestion.ts b/typechain/contracts/GoldenProtocol.sol/GoldenProtocolQuestion.ts index a21d8cf3..1d43549b 100644 --- a/typechain/contracts/GoldenProtocol.sol/GoldenProtocolQuestion.ts +++ b/typechain/contracts/GoldenProtocol.sol/GoldenProtocolQuestion.ts @@ -137,12 +137,27 @@ export interface GoldenProtocolQuestionInterface extends utils.Interface { decodeFunctionResult(functionFragment: "upvote", data: BytesLike): Result; events: { + "AnswerAdded(bytes16,bytes16,string,uint256)": EventFragment; "OwnershipTransferred(address,address)": EventFragment; }; + getEvent(nameOrSignatureOrTopic: "AnswerAdded"): EventFragment; getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; } +export interface AnswerAddedEventObject { + subjectUUID: string; + predicateUUID: string; + answer: string; + index: BigNumber; +} +export type AnswerAddedEvent = TypedEvent< + [string, string, string, BigNumber], + AnswerAddedEventObject +>; + +export type AnswerAddedEventFilter = TypedEventFilter; + export interface OwnershipTransferredEventObject { previousOwner: string; newOwner: string; @@ -323,6 +338,19 @@ export interface GoldenProtocolQuestion extends BaseContract { }; filters: { + "AnswerAdded(bytes16,bytes16,string,uint256)"( + subjectUUID?: null, + predicateUUID?: null, + answer?: null, + index?: null + ): AnswerAddedEventFilter; + AnswerAdded( + subjectUUID?: null, + predicateUUID?: null, + answer?: null, + index?: null + ): AnswerAddedEventFilter; + "OwnershipTransferred(address,address)"( previousOwner?: string | null, newOwner?: string | null diff --git a/typechain/factories/contracts/GoldenProtocol.sol/GoldenProtocolQuestion__factory.ts b/typechain/factories/contracts/GoldenProtocol.sol/GoldenProtocolQuestion__factory.ts index b39ea136..bbffd59a 100644 --- a/typechain/factories/contracts/GoldenProtocol.sol/GoldenProtocolQuestion__factory.ts +++ b/typechain/factories/contracts/GoldenProtocol.sol/GoldenProtocolQuestion__factory.ts @@ -7,7 +7,6 @@ import { Contract, ContractFactory, BytesLike, - BigNumberish, Overrides, } from "ethers"; import type { Provider, TransactionRequest } from "@ethersproject/providers"; @@ -19,6 +18,11 @@ import type { const _abi = [ { inputs: [ + { + internalType: "address", + name: "goldenTokenAddress", + type: "address", + }, { internalType: "address", name: "_asker", @@ -34,14 +38,40 @@ const _abi = [ name: "_predicateUUID", type: "bytes16", }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ { + indexed: false, + internalType: "bytes16", + name: "subjectUUID", + type: "bytes16", + }, + { + indexed: false, + internalType: "bytes16", + name: "predicateUUID", + type: "bytes16", + }, + { + indexed: false, + internalType: "string", + name: "answer", + type: "string", + }, + { + indexed: false, internalType: "uint256", - name: "_bounty", + name: "index", type: "uint256", }, ], - stateMutability: "nonpayable", - type: "constructor", + name: "AnswerAdded", + type: "event", }, { anonymous: false, @@ -280,7 +310,7 @@ const _abi = [ ]; const _bytecode = - "0x60806040523480156200001157600080fd5b506040516200144e3803806200144e83398101604081905262000034916200015f565b6200003f33620000f1565b6001600160a01b038416620000b45760405162461bcd60e51b815260206004820152603160248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a2061736b657220697360448201527020746865207a65726f206164647265737360781b606482015260840160405180910390fd5b600180546001600160a01b039095166001600160a01b031990951694909417909355608090811c600160801b0291901c17600355600255620001be565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160801b0319811681146200015a57600080fd5b919050565b600080600080608085870312156200017657600080fd5b84516001600160a01b03811681146200018e57600080fd5b93506200019e6020860162000141565b9250620001ae6040860162000141565b6060959095015193969295505050565b61128080620001ce6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806388fae0e91161008c578063bbe0ba8511610066578063bbe0ba85146101d4578063c7a66eb3146101e8578063e1145e4b146101fb578063f2fde38b1461021057600080fd5b806388fae0e9146101915780638da5cb5b146101a6578063943dfef1146101cb57600080fd5b8063715018a6116100c8578063715018a6146101325780637a2faee01461013a57806385bb7d691461016957806388775d8f1461017e57600080fd5b806301ddf070146100ef578063366b2baa1461010457806363bd1d4a1461012a575b600080fd5b6101026100fd366004610ced565b610223565b005b610117610112366004610d38565b61037e565b6040519081526020015b60405180910390f35b6101026103b5565b610102610554565b6003546101479060801b81565b6040516fffffffffffffffffffffffffffffffff199091168152602001610121565b610171610568565b6040516101219190610e40565b61010261018c366004610e5a565b6105f6565b610199610695565b6040516101219190610f07565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610121565b61011760025481565b60035461014790600160801b900460801b81565b6001546101b3906001600160a01b031681565b61020361080f565b6040516101219190610f1a565b61010261021e366004610f7c565b6109d0565b600654811061029f5760405162461bcd60e51b815260206004820152603860248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a20746865726520697360448201527f206e6f20616e73776572206174207468617420696e646578000000000000000060648201526084015b60405180910390fd5b336000908152600a6020526040902054156103135760405162461bcd60e51b815260206004820152602e60248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a20796f75206861766560448201526d08185b1c9958591e481d9bdd195960921b6064820152608401610296565b6000610320600583610a49565b6001600160a01b0381166000908152600b60205260408120805492935033926001929061034e908490610fad565b90915550506001600160a01b0381166000908152600a60205260409020839055610379600782610a7c565b505050565b60008282604051602001610393929190610fc0565b6040516020818303038152906040528051906020012060001c90505b92915050565b6001546001600160a01b031633146104195760405162461bcd60e51b815260206004820152602160248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a206f6e6c7941736b656044820152603960f91b6064820152608401610296565b6000610423610695565b9050806040015161043c6000546001600160a01b031690565b6001600160a01b0316636407e0d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610479573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049d9190610fec565b11156105085760405162461bcd60e51b815260206004820152603460248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a207061796f75743a206044820152731b5a5b9a5b5d5b559bdd195cc81b9bdd081b595d60621b6064820152608401610296565b602081015160049061051a9082611087565b5080516002546040516001600160a01b0383169180156108fc02916000818181858888f19350505050158015610379573d6000803e3d6000fd5b61055c610a98565b6105666000610af2565b565b6004805461057590611005565b80601f01602080910402602001604051908101604052809291908181526020018280546105a190611005565b80156105ee5780601f106105c3576101008083540402835291602001916105ee565b820191906000526020600020905b8154815290600101906020018083116105d157829003601f168201915b505050505081565b806106535760405162461bcd60e51b815260206004820152602760248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a20616e7377657220696044820152667320656d70747960c81b6064820152608401610296565b33600081815260096020526040902061066d838583611147565b50610679600582610a7c565b6001600160a01b03166000908152600b60205260408120555050565b6106c2604051806060016040528060006001600160a01b0316815260200160608152602001600081525090565b60008060005b600654811015610726576000600b816106e2600585610a49565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050838110610713578093508192505b508061071e81611208565b9150506106c8565b506000610734600583610a49565b90506040518060600160405280826001600160a01b0316815260200160096000846001600160a01b03166001600160a01b03168152602001908152602001600020805461078090611005565b80601f01602080910402602001604051908101604052809291908181526020018280546107ac90611005565b80156107f95780601f106107ce576101008083540402835291602001916107f9565b820191906000526020600020905b8154815290600101906020018083116107dc57829003601f168201915b5050505050815260200184815250935050505090565b60065460609060009067ffffffffffffffff81111561083057610830610d22565b60405190808252806020026020018201604052801561088e57816020015b61087b604051806060016040528060006001600160a01b0316815260200160608152602001600081525090565b81526020019060019003908161084e5790505b50905060005b6006548110156109ca5760006108ab600583610a49565b90506040518060600160405280826001600160a01b0316815260200160096000846001600160a01b03166001600160a01b0316815260200190815260200160002080546108f790611005565b80601f016020809104026020016040519081016040528092919081815260200182805461092390611005565b80156109705780601f1061094557610100808354040283529160200191610970565b820191906000526020600020905b81548152906001019060200180831161095357829003601f168201915b50505091835250506001600160a01b0383166000908152600b602090815260409091205491015283518490849081106109ab576109ab611221565b60200260200101819052505080806109c290611208565b915050610894565b50919050565b6109d8610a98565b6001600160a01b038116610a3d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610296565b610a4681610af2565b50565b6000826001018281548110610a6057610a60611221565b6000918252602090912001546001600160a01b03169392505050565b610a868282610b42565b610a9457610a948282610ba5565b5050565b6000546001600160a01b031633146105665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610296565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60018201546000908103610b58575060006103af565b6001600160a01b0382166000818152602085905260409020546001850180549091908110610b8857610b88611221565b6000918252602090912001546001600160a01b0316149392505050565b6001600160a01b038116610c0c5760405162461bcd60e51b815260206004820152602860248201527f556e6f7264657265644b65795365742831303029202d204b65792063616e6e6f604482015267074206265203078360c41b6064820152608401610296565b610c168282610b42565b15610c955760405162461bcd60e51b815260206004820152604360248201527f556e6f726465726564416464726573735365742831303129202d20416464726560448201527f737320286b65792920616c72656164792065786973747320696e20746865207360648201526232ba1760e91b608482015260a401610296565b6001828101805480830182556000828152602090200180546001600160a01b0319166001600160a01b03851617905554610ccf9190611237565b6001600160a01b039091166000908152602092909252604090912055565b600060208284031215610cff57600080fd5b5035919050565b80356001600160a01b0381168114610d1d57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610d4b57600080fd5b610d5483610d06565b9150602083013567ffffffffffffffff80821115610d7157600080fd5b818501915085601f830112610d8557600080fd5b813581811115610d9757610d97610d22565b604051601f8201601f19908116603f01168101908382118183101715610dbf57610dbf610d22565b81604052828152886020848701011115610dd857600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000815180845260005b81811015610e2057602081850181015186830182015201610e04565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610e536020830184610dfa565b9392505050565b60008060208385031215610e6d57600080fd5b823567ffffffffffffffff80821115610e8557600080fd5b818501915085601f830112610e9957600080fd5b813581811115610ea857600080fd5b866020828501011115610eba57600080fd5b60209290920196919550909350505050565b60018060a01b0381511682526000602082015160606020850152610ef36060850182610dfa565b604093840151949093019390935250919050565b602081526000610e536020830184610ecc565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015610f6f57603f19888603018452610f5d858351610ecc565b94509285019290850190600101610f41565b5092979650505050505050565b600060208284031215610f8e57600080fd5b610e5382610d06565b634e487b7160e01b600052601160045260246000fd5b808201808211156103af576103af610f97565b6001600160a01b0383168152604060208201819052600090610fe490830184610dfa565b949350505050565b600060208284031215610ffe57600080fd5b5051919050565b600181811c9082168061101957607f821691505b6020821081036109ca57634e487b7160e01b600052602260045260246000fd5b601f82111561037957600081815260208120601f850160051c810160208610156110605750805b601f850160051c820191505b8181101561107f5782815560010161106c565b505050505050565b815167ffffffffffffffff8111156110a1576110a1610d22565b6110b5816110af8454611005565b84611039565b602080601f8311600181146110ea57600084156110d25750858301515b600019600386901b1c1916600185901b17855561107f565b600085815260208120601f198616915b82811015611119578886015182559484019460019091019084016110fa565b50858210156111375787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b67ffffffffffffffff83111561115f5761115f610d22565b6111738361116d8354611005565b83611039565b6000601f8411600181146111a7576000851561118f5750838201355b600019600387901b1c1916600186901b178355611201565b600083815260209020601f19861690835b828110156111d857868501358255602094850194600190920191016111b8565b50868210156111f55760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60006001820161121a5761121a610f97565b5060010190565b634e487b7160e01b600052603260045260246000fd5b818103818111156103af576103af610f9756fea264697066735822122015ad514b97df38df80bc6e0db0581076104830cdb35fd709485f7877380c98f664736f6c63430008100033"; + "0x60806040523480156200001157600080fd5b50604051620018b8380380620018b8833981016040819052620000349162000182565b6200003f33620000fc565b6001600160a01b038316620000b45760405162461bcd60e51b815260206004820152603160248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a2061736b657220697360448201527020746865207a65726f206164647265737360781b606482015260840160405180910390fd5b600180546001600160a01b039586166001600160a01b0319918216179091556002805494909516931692909217909255608090811c600160801b0291901c17600355620001df565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200016457600080fd5b919050565b80516001600160801b0319811681146200016457600080fd5b600080600080608085870312156200019957600080fd5b620001a4856200014c565b9350620001b4602086016200014c565b9250620001c46040860162000169565b9150620001d46060860162000169565b905092959194509250565b6116c980620001ef6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806388fae0e91161008c578063bbe0ba8511610066578063bbe0ba85146101ca578063c7a66eb3146101de578063e1145e4b146101f1578063f2fde38b1461020657600080fd5b806388fae0e9146101885780638da5cb5b1461019d578063943dfef1146101c257600080fd5b8063715018a6116100c8578063715018a6146101325780637a2faee01461013a57806385bb7d691461016057806388775d8f1461017557600080fd5b806301ddf070146100ef578063366b2baa1461010457806363bd1d4a1461012a575b600080fd5b6101026100fd3660046110a9565b610219565b005b6101176101123660046110f4565b610374565b6040519081526020015b60405180910390f35b6101026103ab565b61010261059c565b6003546101479060801b81565b6040516001600160801b03199091168152602001610121565b6101686105b0565b6040516101219190611206565b610102610183366004611219565b61063e565b61019061073c565b60405161012191906112c6565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610121565b6101176108b6565b60035461014790600160801b900460801b81565b6002546101aa906001600160a01b031681565b6101f9610928565b60405161012191906112d9565b61010261021436600461133b565b610ae9565b60065481106102955760405162461bcd60e51b815260206004820152603860248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a20746865726520697360448201527f206e6f20616e73776572206174207468617420696e646578000000000000000060648201526084015b60405180910390fd5b336000908152600a6020526040902054156103095760405162461bcd60e51b815260206004820152602e60248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a20796f75206861766560448201526d08185b1c9958591e481d9bdd195960921b606482015260840161028c565b6000610316600583610b62565b6001600160a01b0381166000908152600b60205260408120805492935033926001929061034490849061136c565b90915550506001600160a01b0381166000908152600a6020526040902083905561036f600782610b95565b505050565b6000828260405160200161038992919061137f565b6040516020818303038152906040528051906020012060001c90505b92915050565b6002546001600160a01b0316331461040f5760405162461bcd60e51b815260206004820152602160248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a206f6e6c7941736b656044820152603960f91b606482015260840161028c565b600061041961073c565b905080604001516104326000546001600160a01b031690565b6001600160a01b0316636407e0d46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049391906113a3565b11156104fe5760405162461bcd60e51b815260206004820152603460248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a207061796f75743a206044820152731b5a5b9a5b5d5b559bdd195cc81b9bdd081b595d60621b606482015260840161028c565b6020810151600490610510908261143e565b5080516001546040516370a0823160e01b81523060048201526105989183916001600160a01b03909116906370a0823190602401602060405180830381865afa158015610561573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058591906113a3565b6001546001600160a01b03169190610bad565b5050565b6105a4610bff565b6105ae6000610c59565b565b600480546105bd906113bc565b80601f01602080910402602001604051908101604052809291908181526020018280546105e9906113bc565b80156106365780601f1061060b57610100808354040283529160200191610636565b820191906000526020600020905b81548152906001019060200180831161061957829003601f168201915b505050505081565b8061069b5760405162461bcd60e51b815260206004820152602760248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a20616e7377657220696044820152667320656d70747960c81b606482015260840161028c565b3360008181526009602052604090206106b58385836114fe565b506106c1600582610b95565b6001600160a01b0381166000908152600b602090815260408083208390556003546005909252918290205491517ffd045500a034a5e731f843b696fcd566854cd7ccb879d6b3adb708152bbe43e69261072f92608081811b93600160801b909204901b9188918891906115bf565b60405180910390a1505050565b610769604051806060016040528060006001600160a01b0316815260200160608152602001600081525090565b60008060005b6006548110156107cd576000600b81610789600585610b62565b6001600160a01b03166001600160a01b031681526020019081526020016000205490508381106107ba578093508192505b50806107c581611613565b91505061076f565b5060006107db600583610b62565b90506040518060600160405280826001600160a01b0316815260200160096000846001600160a01b03166001600160a01b031681526020019081526020016000208054610827906113bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610853906113bc565b80156108a05780601f10610875576101008083540402835291602001916108a0565b820191906000526020600020905b81548152906001019060200180831161088357829003601f168201915b5050505050815260200184815250935050505090565b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156108ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092391906113a3565b905090565b60065460609060009067ffffffffffffffff811115610949576109496110de565b6040519080825280602002602001820160405280156109a757816020015b610994604051806060016040528060006001600160a01b0316815260200160608152602001600081525090565b8152602001906001900390816109675790505b50905060005b600654811015610ae35760006109c4600583610b62565b90506040518060600160405280826001600160a01b0316815260200160096000846001600160a01b03166001600160a01b031681526020019081526020016000208054610a10906113bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3c906113bc565b8015610a895780601f10610a5e57610100808354040283529160200191610a89565b820191906000526020600020905b815481529060010190602001808311610a6c57829003601f168201915b50505091835250506001600160a01b0383166000908152600b60209081526040909120549101528351849084908110610ac457610ac461162c565b6020026020010181905250508080610adb90611613565b9150506109ad565b50919050565b610af1610bff565b6001600160a01b038116610b565760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161028c565b610b5f81610c59565b50565b6000826001018281548110610b7957610b7961162c565b6000918252602090912001546001600160a01b03169392505050565b610b9f8282610ca9565b610598576105988282610d0c565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261036f908490610e54565b6000546001600160a01b031633146105ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161028c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60018201546000908103610cbf575060006103a5565b6001600160a01b0382166000818152602085905260409020546001850180549091908110610cef57610cef61162c565b6000918252602090912001546001600160a01b0316149392505050565b6001600160a01b038116610d735760405162461bcd60e51b815260206004820152602860248201527f556e6f7264657265644b65795365742831303029202d204b65792063616e6e6f604482015267074206265203078360c41b606482015260840161028c565b610d7d8282610ca9565b15610dfc5760405162461bcd60e51b815260206004820152604360248201527f556e6f726465726564416464726573735365742831303129202d20416464726560448201527f737320286b65792920616c72656164792065786973747320696e20746865207360648201526232ba1760e91b608482015260a40161028c565b6001828101805480830182556000828152602090200180546001600160a01b0319166001600160a01b03851617905554610e369190611642565b6001600160a01b039091166000908152602092909252604090912055565b6000610ea9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610f269092919063ffffffff16565b80519091501561036f5780806020019051810190610ec79190611655565b61036f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161028c565b6060610f358484600085610f3f565b90505b9392505050565b606082471015610fa05760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161028c565b6001600160a01b0385163b610ff75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161028c565b600080866001600160a01b031685876040516110139190611677565b60006040518083038185875af1925050503d8060008114611050576040519150601f19603f3d011682016040523d82523d6000602084013e611055565b606091505b5091509150611065828286611070565b979650505050505050565b6060831561107f575081610f38565b82511561108f5782518084602001fd5b8160405162461bcd60e51b815260040161028c9190611206565b6000602082840312156110bb57600080fd5b5035919050565b80356001600160a01b03811681146110d957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561110757600080fd5b611110836110c2565b9150602083013567ffffffffffffffff8082111561112d57600080fd5b818501915085601f83011261114157600080fd5b813581811115611153576111536110de565b604051601f8201601f19908116603f0116810190838211818310171561117b5761117b6110de565b8160405282815288602084870101111561119457600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156111d15781810151838201526020016111b9565b50506000910152565b600081518084526111f28160208601602086016111b6565b601f01601f19169290920160200192915050565b602081526000610f3860208301846111da565b6000806020838503121561122c57600080fd5b823567ffffffffffffffff8082111561124457600080fd5b818501915085601f83011261125857600080fd5b81358181111561126757600080fd5b86602082850101111561127957600080fd5b60209290920196919550909350505050565b60018060a01b03815116825260006020820151606060208501526112b260608501826111da565b604093840151949093019390935250919050565b602081526000610f38602083018461128b565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561132e57603f1988860301845261131c85835161128b565b94509285019290850190600101611300565b5092979650505050505050565b60006020828403121561134d57600080fd5b610f38826110c2565b634e487b7160e01b600052601160045260246000fd5b808201808211156103a5576103a5611356565b6001600160a01b0383168152604060208201819052600090610f35908301846111da565b6000602082840312156113b557600080fd5b5051919050565b600181811c908216806113d057607f821691505b602082108103610ae357634e487b7160e01b600052602260045260246000fd5b601f82111561036f57600081815260208120601f850160051c810160208610156114175750805b601f850160051c820191505b8181101561143657828155600101611423565b505050505050565b815167ffffffffffffffff811115611458576114586110de565b61146c8161146684546113bc565b846113f0565b602080601f8311600181146114a157600084156114895750858301515b600019600386901b1c1916600185901b178555611436565b600085815260208120601f198616915b828110156114d0578886015182559484019460019091019084016114b1565b50858210156114ee5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b67ffffffffffffffff831115611516576115166110de565b61152a8361152483546113bc565b836113f0565b6000601f84116001811461155e57600085156115465750838201355b600019600387901b1c1916600186901b1783556115b8565b600083815260209020601f19861690835b8281101561158f578685013582556020948501946001909201910161156f565b50868210156115ac5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b6001600160801b031986811682528516602082015260806040820181905281018390526000838560a0840137600060a0858401015260a0601f19601f86011683010190508260608301529695505050505050565b60006001820161162557611625611356565b5060010190565b634e487b7160e01b600052603260045260246000fd5b818103818111156103a5576103a5611356565b60006020828403121561166757600080fd5b81518015158114610f3857600080fd5b600082516116898184602087016111b6565b919091019291505056fea2646970667358221220084ace50975668d3c2bd8971aa83637599ad4cf6cd00178a81b7bc1f1516824864736f6c63430008100033"; type GoldenProtocolQuestionConstructorParams = | [signer?: Signer] @@ -300,32 +330,32 @@ export class GoldenProtocolQuestion__factory extends ContractFactory { } override deploy( + goldenTokenAddress: string, _asker: string, _subjectUUID: BytesLike, _predicateUUID: BytesLike, - _bounty: BigNumberish, overrides?: Overrides & { from?: string | Promise } ): Promise { return super.deploy( + goldenTokenAddress, _asker, _subjectUUID, _predicateUUID, - _bounty, overrides || {} ) as Promise; } override getDeployTransaction( + goldenTokenAddress: string, _asker: string, _subjectUUID: BytesLike, _predicateUUID: BytesLike, - _bounty: BigNumberish, overrides?: Overrides & { from?: string | Promise } ): TransactionRequest { return super.getDeployTransaction( + goldenTokenAddress, _asker, _subjectUUID, _predicateUUID, - _bounty, overrides || {} ); } diff --git a/typechain/factories/contracts/GoldenProtocol.sol/GoldenProtocol__factory.ts b/typechain/factories/contracts/GoldenProtocol.sol/GoldenProtocol__factory.ts index a065e413..c71d301b 100644 --- a/typechain/factories/contracts/GoldenProtocol.sol/GoldenProtocol__factory.ts +++ b/typechain/factories/contracts/GoldenProtocol.sol/GoldenProtocol__factory.ts @@ -18,6 +18,11 @@ import type { const _abi = [ { inputs: [ + { + internalType: "address", + name: "goldenTokenAddress", + type: "address", + }, { internalType: "uint256", name: "_minimumVotes", @@ -46,6 +51,31 @@ const _abi = [ name: "OwnershipTransferred", type: "event", }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "questionAddress", + type: "address", + }, + { + indexed: false, + internalType: "bytes16", + name: "subjectUUID", + type: "bytes16", + }, + { + indexed: false, + internalType: "bytes16", + name: "predicateUUID", + type: "bytes16", + }, + ], + name: "QuestionCreated", + type: "event", + }, { inputs: [ { @@ -101,19 +131,6 @@ const _abi = [ stateMutability: "view", type: "function", }, - { - inputs: [], - name: "questions", - outputs: [ - { - internalType: "address[]", - name: "", - type: "address[]", - }, - ], - stateMutability: "view", - type: "function", - }, { inputs: [], name: "renounceOwnership", @@ -150,7 +167,7 @@ const _abi = [ ]; const _bytecode = - "0x608060405234801561001057600080fd5b50604051611b58380380611b5883398101604081905261002f91610090565b61003833610040565b6003556100a9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100a257600080fd5b5051919050565b611aa0806100b86000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100bd5780639902b633146100e2578063d6fbfb24146100f5578063f2fde38b1461010857600080fd5b80636407e0d414610082578063715018a61461009e57806377a49821146100a8575b600080fd5b61008b60035481565b6040519081526020015b60405180910390f35b6100a661011b565b005b6100b061012f565b60405161009591906104f6565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610095565b6100a66100f0366004610543565b610193565b6100ca610103366004610579565b6101a0565b6100a66101163660046105b5565b610214565b610123610292565b61012d60006102ec565b565b60606001800180548060200260200160405190810160405280929190818152602001828054801561018957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161016b575b5050505050905090565b61019b610292565b600355565b600080338585856040516101b3906104e9565b6001600160a01b0390941684526001600160801b03199283166020850152911660408301526060820152608001604051809103906000f0801580156101fc573d6000803e3d6000fd5b5090508061020b60018261033c565b95945050505050565b61021c610292565b6001600160a01b0381166102865760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61028f816102ec565b50565b6000546001600160a01b0316331461012d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161027d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381166103a35760405162461bcd60e51b815260206004820152602860248201527f556e6f7264657265644b65795365742831303029202d204b65792063616e6e6f604482015267074206265203078360c41b606482015260840161027d565b6103ad8282610484565b1561042c5760405162461bcd60e51b815260206004820152604360248201527f556e6f726465726564416464726573735365742831303129202d20416464726560448201527f737320286b65792920616c72656164792065786973747320696e20746865207360648201526232ba1760e91b608482015260a40161027d565b6001828101805480830182556000828152602090200180546001600160a01b0319166001600160a01b0385161790555461046691906105e5565b6001600160a01b039091166000908152602092909252604090912055565b6001820154600090810361049a575060006104e3565b6001600160a01b03821660008181526020859052604090205460018501805490919081106104ca576104ca610606565b6000918252602090912001546001600160a01b03161490505b92915050565b61144e8061061d83390190565b6020808252825182820181905260009190848201906040850190845b818110156105375783516001600160a01b031683529284019291840191600101610512565b50909695505050505050565b60006020828403121561055557600080fd5b5035919050565b80356001600160801b03198116811461057457600080fd5b919050565b60008060006060848603121561058e57600080fd5b6105978461055c565b92506105a56020850161055c565b9150604084013590509250925092565b6000602082840312156105c757600080fd5b81356001600160a01b03811681146105de57600080fd5b9392505050565b818103818111156104e357634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fdfe60806040523480156200001157600080fd5b506040516200144e3803806200144e83398101604081905262000034916200015f565b6200003f33620000f1565b6001600160a01b038416620000b45760405162461bcd60e51b815260206004820152603160248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a2061736b657220697360448201527020746865207a65726f206164647265737360781b606482015260840160405180910390fd5b600180546001600160a01b039095166001600160a01b031990951694909417909355608090811c600160801b0291901c17600355600255620001be565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160801b0319811681146200015a57600080fd5b919050565b600080600080608085870312156200017657600080fd5b84516001600160a01b03811681146200018e57600080fd5b93506200019e6020860162000141565b9250620001ae6040860162000141565b6060959095015193969295505050565b61128080620001ce6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806388fae0e91161008c578063bbe0ba8511610066578063bbe0ba85146101d4578063c7a66eb3146101e8578063e1145e4b146101fb578063f2fde38b1461021057600080fd5b806388fae0e9146101915780638da5cb5b146101a6578063943dfef1146101cb57600080fd5b8063715018a6116100c8578063715018a6146101325780637a2faee01461013a57806385bb7d691461016957806388775d8f1461017e57600080fd5b806301ddf070146100ef578063366b2baa1461010457806363bd1d4a1461012a575b600080fd5b6101026100fd366004610ced565b610223565b005b610117610112366004610d38565b61037e565b6040519081526020015b60405180910390f35b6101026103b5565b610102610554565b6003546101479060801b81565b6040516fffffffffffffffffffffffffffffffff199091168152602001610121565b610171610568565b6040516101219190610e40565b61010261018c366004610e5a565b6105f6565b610199610695565b6040516101219190610f07565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610121565b61011760025481565b60035461014790600160801b900460801b81565b6001546101b3906001600160a01b031681565b61020361080f565b6040516101219190610f1a565b61010261021e366004610f7c565b6109d0565b600654811061029f5760405162461bcd60e51b815260206004820152603860248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a20746865726520697360448201527f206e6f20616e73776572206174207468617420696e646578000000000000000060648201526084015b60405180910390fd5b336000908152600a6020526040902054156103135760405162461bcd60e51b815260206004820152602e60248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a20796f75206861766560448201526d08185b1c9958591e481d9bdd195960921b6064820152608401610296565b6000610320600583610a49565b6001600160a01b0381166000908152600b60205260408120805492935033926001929061034e908490610fad565b90915550506001600160a01b0381166000908152600a60205260409020839055610379600782610a7c565b505050565b60008282604051602001610393929190610fc0565b6040516020818303038152906040528051906020012060001c90505b92915050565b6001546001600160a01b031633146104195760405162461bcd60e51b815260206004820152602160248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a206f6e6c7941736b656044820152603960f91b6064820152608401610296565b6000610423610695565b9050806040015161043c6000546001600160a01b031690565b6001600160a01b0316636407e0d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610479573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049d9190610fec565b11156105085760405162461bcd60e51b815260206004820152603460248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a207061796f75743a206044820152731b5a5b9a5b5d5b559bdd195cc81b9bdd081b595d60621b6064820152608401610296565b602081015160049061051a9082611087565b5080516002546040516001600160a01b0383169180156108fc02916000818181858888f19350505050158015610379573d6000803e3d6000fd5b61055c610a98565b6105666000610af2565b565b6004805461057590611005565b80601f01602080910402602001604051908101604052809291908181526020018280546105a190611005565b80156105ee5780601f106105c3576101008083540402835291602001916105ee565b820191906000526020600020905b8154815290600101906020018083116105d157829003601f168201915b505050505081565b806106535760405162461bcd60e51b815260206004820152602760248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a20616e7377657220696044820152667320656d70747960c81b6064820152608401610296565b33600081815260096020526040902061066d838583611147565b50610679600582610a7c565b6001600160a01b03166000908152600b60205260408120555050565b6106c2604051806060016040528060006001600160a01b0316815260200160608152602001600081525090565b60008060005b600654811015610726576000600b816106e2600585610a49565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050838110610713578093508192505b508061071e81611208565b9150506106c8565b506000610734600583610a49565b90506040518060600160405280826001600160a01b0316815260200160096000846001600160a01b03166001600160a01b03168152602001908152602001600020805461078090611005565b80601f01602080910402602001604051908101604052809291908181526020018280546107ac90611005565b80156107f95780601f106107ce576101008083540402835291602001916107f9565b820191906000526020600020905b8154815290600101906020018083116107dc57829003601f168201915b5050505050815260200184815250935050505090565b60065460609060009067ffffffffffffffff81111561083057610830610d22565b60405190808252806020026020018201604052801561088e57816020015b61087b604051806060016040528060006001600160a01b0316815260200160608152602001600081525090565b81526020019060019003908161084e5790505b50905060005b6006548110156109ca5760006108ab600583610a49565b90506040518060600160405280826001600160a01b0316815260200160096000846001600160a01b03166001600160a01b0316815260200190815260200160002080546108f790611005565b80601f016020809104026020016040519081016040528092919081815260200182805461092390611005565b80156109705780601f1061094557610100808354040283529160200191610970565b820191906000526020600020905b81548152906001019060200180831161095357829003601f168201915b50505091835250506001600160a01b0383166000908152600b602090815260409091205491015283518490849081106109ab576109ab611221565b60200260200101819052505080806109c290611208565b915050610894565b50919050565b6109d8610a98565b6001600160a01b038116610a3d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610296565b610a4681610af2565b50565b6000826001018281548110610a6057610a60611221565b6000918252602090912001546001600160a01b03169392505050565b610a868282610b42565b610a9457610a948282610ba5565b5050565b6000546001600160a01b031633146105665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610296565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60018201546000908103610b58575060006103af565b6001600160a01b0382166000818152602085905260409020546001850180549091908110610b8857610b88611221565b6000918252602090912001546001600160a01b0316149392505050565b6001600160a01b038116610c0c5760405162461bcd60e51b815260206004820152602860248201527f556e6f7264657265644b65795365742831303029202d204b65792063616e6e6f604482015267074206265203078360c41b6064820152608401610296565b610c168282610b42565b15610c955760405162461bcd60e51b815260206004820152604360248201527f556e6f726465726564416464726573735365742831303129202d20416464726560448201527f737320286b65792920616c72656164792065786973747320696e20746865207360648201526232ba1760e91b608482015260a401610296565b6001828101805480830182556000828152602090200180546001600160a01b0319166001600160a01b03851617905554610ccf9190611237565b6001600160a01b039091166000908152602092909252604090912055565b600060208284031215610cff57600080fd5b5035919050565b80356001600160a01b0381168114610d1d57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610d4b57600080fd5b610d5483610d06565b9150602083013567ffffffffffffffff80821115610d7157600080fd5b818501915085601f830112610d8557600080fd5b813581811115610d9757610d97610d22565b604051601f8201601f19908116603f01168101908382118183101715610dbf57610dbf610d22565b81604052828152886020848701011115610dd857600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000815180845260005b81811015610e2057602081850181015186830182015201610e04565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610e536020830184610dfa565b9392505050565b60008060208385031215610e6d57600080fd5b823567ffffffffffffffff80821115610e8557600080fd5b818501915085601f830112610e9957600080fd5b813581811115610ea857600080fd5b866020828501011115610eba57600080fd5b60209290920196919550909350505050565b60018060a01b0381511682526000602082015160606020850152610ef36060850182610dfa565b604093840151949093019390935250919050565b602081526000610e536020830184610ecc565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015610f6f57603f19888603018452610f5d858351610ecc565b94509285019290850190600101610f41565b5092979650505050505050565b600060208284031215610f8e57600080fd5b610e5382610d06565b634e487b7160e01b600052601160045260246000fd5b808201808211156103af576103af610f97565b6001600160a01b0383168152604060208201819052600090610fe490830184610dfa565b949350505050565b600060208284031215610ffe57600080fd5b5051919050565b600181811c9082168061101957607f821691505b6020821081036109ca57634e487b7160e01b600052602260045260246000fd5b601f82111561037957600081815260208120601f850160051c810160208610156110605750805b601f850160051c820191505b8181101561107f5782815560010161106c565b505050505050565b815167ffffffffffffffff8111156110a1576110a1610d22565b6110b5816110af8454611005565b84611039565b602080601f8311600181146110ea57600084156110d25750858301515b600019600386901b1c1916600185901b17855561107f565b600085815260208120601f198616915b82811015611119578886015182559484019460019091019084016110fa565b50858210156111375787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b67ffffffffffffffff83111561115f5761115f610d22565b6111738361116d8354611005565b83611039565b6000601f8411600181146111a7576000851561118f5750838201355b600019600387901b1c1916600186901b178355611201565b600083815260209020601f19861690835b828110156111d857868501358255602094850194600190920191016111b8565b50868210156111f55760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60006001820161121a5761121a610f97565b5060010190565b634e487b7160e01b600052603260045260246000fd5b818103818111156103af576103af610f9756fea264697066735822122015ad514b97df38df80bc6e0db0581076104830cdb35fd709485f7877380c98f664736f6c63430008100033a2646970667358221220ca1979ea90d95ff33915b8b5a81885840e536d9bed73d193716a6d0a05b9840e64736f6c63430008100033"; + "0x608060405234801561001057600080fd5b506040516121f03803806121f083398101604081905261002f916100b1565b61003833610061565b600180546001600160a01b0319166001600160a01b0393909316929092179091556002556100eb565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080604083850312156100c457600080fd5b82516001600160a01b03811681146100db57600080fd5b6020939093015192949293505050565b6120f6806100fa6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80636407e0d414610067578063715018a6146100835780638da5cb5b1461008d5780639902b633146100b2578063d6fbfb24146100c5578063f2fde38b146100d8575b600080fd5b61007060025481565b6040519081526020015b60405180910390f35b61008b6100eb565b005b6000546001600160a01b03165b6040516001600160a01b03909116815260200161007a565b61008b6100c03660046106bf565b6100ff565b61009a6100d33660046106f5565b61010c565b61008b6100e6366004610731565b6102d7565b6100f3610350565b6100fd60006103aa565b565b610107610350565b600255565b60015460009082906001600160a01b031663dd62ed3e336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381865afa15801561016d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610191919061075a565b10156101f35760405162461bcd60e51b815260206004820152602660248201527f476f6c64656e50726f746f636f6c3a20696e73756666696369656e7420616c6c6044820152656f77616e636560d01b60648201526084015b60405180910390fd5b6001546040516000916001600160a01b031690339087908790610215906106b2565b6001600160a01b0394851681529390921660208401526001600160801b03199081166040840152166060820152608001604051809103906000f080158015610261573d6000803e3d6000fd5b5090508061027d336001546001600160a01b03169083876103fa565b604080516001600160801b03198089168252871660208201526001600160a01b038316917f3076d13066db8356cf7cd41e2693da7420b7e1fbe6068dcf215ea724df87b3a2910160405180910390a29150505b9392505050565b6102df610350565b6001600160a01b0381166103445760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101ea565b61034d816103aa565b50565b6000546001600160a01b031633146100fd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101ea565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261045490859061045a565b50505050565b60006104af826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166105319092919063ffffffff16565b80519091501561052c57808060200190518101906104cd9190610773565b61052c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016101ea565b505050565b60606105408484600085610548565b949350505050565b6060824710156105a95760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016101ea565b6001600160a01b0385163b6106005760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101ea565b600080866001600160a01b0316858760405161061c91906107b9565b60006040518083038185875af1925050503d8060008114610659576040519150601f19603f3d011682016040523d82523d6000602084013e61065e565b606091505b509150915061066e828286610679565b979650505050505050565b606083156106885750816102d0565b8251156106985782518084602001fd5b8160405162461bcd60e51b81526004016101ea91906107d5565b6118b88061080983390190565b6000602082840312156106d157600080fd5b5035919050565b80356001600160801b0319811681146106f057600080fd5b919050565b60008060006060848603121561070a57600080fd5b610713846106d8565b9250610721602085016106d8565b9150604084013590509250925092565b60006020828403121561074357600080fd5b81356001600160a01b03811681146102d057600080fd5b60006020828403121561076c57600080fd5b5051919050565b60006020828403121561078557600080fd5b815180151581146102d057600080fd5b60005b838110156107b0578181015183820152602001610798565b50506000910152565b600082516107cb818460208701610795565b9190910192915050565b60208152600082518060208401526107f4816040850160208701610795565b601f01601f1916919091016040019291505056fe60806040523480156200001157600080fd5b50604051620018b8380380620018b8833981016040819052620000349162000182565b6200003f33620000fc565b6001600160a01b038316620000b45760405162461bcd60e51b815260206004820152603160248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a2061736b657220697360448201527020746865207a65726f206164647265737360781b606482015260840160405180910390fd5b600180546001600160a01b039586166001600160a01b0319918216179091556002805494909516931692909217909255608090811c600160801b0291901c17600355620001df565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200016457600080fd5b919050565b80516001600160801b0319811681146200016457600080fd5b600080600080608085870312156200019957600080fd5b620001a4856200014c565b9350620001b4602086016200014c565b9250620001c46040860162000169565b9150620001d46060860162000169565b905092959194509250565b6116c980620001ef6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806388fae0e91161008c578063bbe0ba8511610066578063bbe0ba85146101ca578063c7a66eb3146101de578063e1145e4b146101f1578063f2fde38b1461020657600080fd5b806388fae0e9146101885780638da5cb5b1461019d578063943dfef1146101c257600080fd5b8063715018a6116100c8578063715018a6146101325780637a2faee01461013a57806385bb7d691461016057806388775d8f1461017557600080fd5b806301ddf070146100ef578063366b2baa1461010457806363bd1d4a1461012a575b600080fd5b6101026100fd3660046110a9565b610219565b005b6101176101123660046110f4565b610374565b6040519081526020015b60405180910390f35b6101026103ab565b61010261059c565b6003546101479060801b81565b6040516001600160801b03199091168152602001610121565b6101686105b0565b6040516101219190611206565b610102610183366004611219565b61063e565b61019061073c565b60405161012191906112c6565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610121565b6101176108b6565b60035461014790600160801b900460801b81565b6002546101aa906001600160a01b031681565b6101f9610928565b60405161012191906112d9565b61010261021436600461133b565b610ae9565b60065481106102955760405162461bcd60e51b815260206004820152603860248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a20746865726520697360448201527f206e6f20616e73776572206174207468617420696e646578000000000000000060648201526084015b60405180910390fd5b336000908152600a6020526040902054156103095760405162461bcd60e51b815260206004820152602e60248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a20796f75206861766560448201526d08185b1c9958591e481d9bdd195960921b606482015260840161028c565b6000610316600583610b62565b6001600160a01b0381166000908152600b60205260408120805492935033926001929061034490849061136c565b90915550506001600160a01b0381166000908152600a6020526040902083905561036f600782610b95565b505050565b6000828260405160200161038992919061137f565b6040516020818303038152906040528051906020012060001c90505b92915050565b6002546001600160a01b0316331461040f5760405162461bcd60e51b815260206004820152602160248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a206f6e6c7941736b656044820152603960f91b606482015260840161028c565b600061041961073c565b905080604001516104326000546001600160a01b031690565b6001600160a01b0316636407e0d46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049391906113a3565b11156104fe5760405162461bcd60e51b815260206004820152603460248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a207061796f75743a206044820152731b5a5b9a5b5d5b559bdd195cc81b9bdd081b595d60621b606482015260840161028c565b6020810151600490610510908261143e565b5080516001546040516370a0823160e01b81523060048201526105989183916001600160a01b03909116906370a0823190602401602060405180830381865afa158015610561573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058591906113a3565b6001546001600160a01b03169190610bad565b5050565b6105a4610bff565b6105ae6000610c59565b565b600480546105bd906113bc565b80601f01602080910402602001604051908101604052809291908181526020018280546105e9906113bc565b80156106365780601f1061060b57610100808354040283529160200191610636565b820191906000526020600020905b81548152906001019060200180831161061957829003601f168201915b505050505081565b8061069b5760405162461bcd60e51b815260206004820152602760248201527f476f6c64656e50726f746f636f6c5175657374696f6e3a20616e7377657220696044820152667320656d70747960c81b606482015260840161028c565b3360008181526009602052604090206106b58385836114fe565b506106c1600582610b95565b6001600160a01b0381166000908152600b602090815260408083208390556003546005909252918290205491517ffd045500a034a5e731f843b696fcd566854cd7ccb879d6b3adb708152bbe43e69261072f92608081811b93600160801b909204901b9188918891906115bf565b60405180910390a1505050565b610769604051806060016040528060006001600160a01b0316815260200160608152602001600081525090565b60008060005b6006548110156107cd576000600b81610789600585610b62565b6001600160a01b03166001600160a01b031681526020019081526020016000205490508381106107ba578093508192505b50806107c581611613565b91505061076f565b5060006107db600583610b62565b90506040518060600160405280826001600160a01b0316815260200160096000846001600160a01b03166001600160a01b031681526020019081526020016000208054610827906113bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610853906113bc565b80156108a05780601f10610875576101008083540402835291602001916108a0565b820191906000526020600020905b81548152906001019060200180831161088357829003601f168201915b5050505050815260200184815250935050505090565b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156108ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092391906113a3565b905090565b60065460609060009067ffffffffffffffff811115610949576109496110de565b6040519080825280602002602001820160405280156109a757816020015b610994604051806060016040528060006001600160a01b0316815260200160608152602001600081525090565b8152602001906001900390816109675790505b50905060005b600654811015610ae35760006109c4600583610b62565b90506040518060600160405280826001600160a01b0316815260200160096000846001600160a01b03166001600160a01b031681526020019081526020016000208054610a10906113bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3c906113bc565b8015610a895780601f10610a5e57610100808354040283529160200191610a89565b820191906000526020600020905b815481529060010190602001808311610a6c57829003601f168201915b50505091835250506001600160a01b0383166000908152600b60209081526040909120549101528351849084908110610ac457610ac461162c565b6020026020010181905250508080610adb90611613565b9150506109ad565b50919050565b610af1610bff565b6001600160a01b038116610b565760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161028c565b610b5f81610c59565b50565b6000826001018281548110610b7957610b7961162c565b6000918252602090912001546001600160a01b03169392505050565b610b9f8282610ca9565b610598576105988282610d0c565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261036f908490610e54565b6000546001600160a01b031633146105ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161028c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60018201546000908103610cbf575060006103a5565b6001600160a01b0382166000818152602085905260409020546001850180549091908110610cef57610cef61162c565b6000918252602090912001546001600160a01b0316149392505050565b6001600160a01b038116610d735760405162461bcd60e51b815260206004820152602860248201527f556e6f7264657265644b65795365742831303029202d204b65792063616e6e6f604482015267074206265203078360c41b606482015260840161028c565b610d7d8282610ca9565b15610dfc5760405162461bcd60e51b815260206004820152604360248201527f556e6f726465726564416464726573735365742831303129202d20416464726560448201527f737320286b65792920616c72656164792065786973747320696e20746865207360648201526232ba1760e91b608482015260a40161028c565b6001828101805480830182556000828152602090200180546001600160a01b0319166001600160a01b03851617905554610e369190611642565b6001600160a01b039091166000908152602092909252604090912055565b6000610ea9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610f269092919063ffffffff16565b80519091501561036f5780806020019051810190610ec79190611655565b61036f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161028c565b6060610f358484600085610f3f565b90505b9392505050565b606082471015610fa05760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161028c565b6001600160a01b0385163b610ff75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161028c565b600080866001600160a01b031685876040516110139190611677565b60006040518083038185875af1925050503d8060008114611050576040519150601f19603f3d011682016040523d82523d6000602084013e611055565b606091505b5091509150611065828286611070565b979650505050505050565b6060831561107f575081610f38565b82511561108f5782518084602001fd5b8160405162461bcd60e51b815260040161028c9190611206565b6000602082840312156110bb57600080fd5b5035919050565b80356001600160a01b03811681146110d957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561110757600080fd5b611110836110c2565b9150602083013567ffffffffffffffff8082111561112d57600080fd5b818501915085601f83011261114157600080fd5b813581811115611153576111536110de565b604051601f8201601f19908116603f0116810190838211818310171561117b5761117b6110de565b8160405282815288602084870101111561119457600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156111d15781810151838201526020016111b9565b50506000910152565b600081518084526111f28160208601602086016111b6565b601f01601f19169290920160200192915050565b602081526000610f3860208301846111da565b6000806020838503121561122c57600080fd5b823567ffffffffffffffff8082111561124457600080fd5b818501915085601f83011261125857600080fd5b81358181111561126757600080fd5b86602082850101111561127957600080fd5b60209290920196919550909350505050565b60018060a01b03815116825260006020820151606060208501526112b260608501826111da565b604093840151949093019390935250919050565b602081526000610f38602083018461128b565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561132e57603f1988860301845261131c85835161128b565b94509285019290850190600101611300565b5092979650505050505050565b60006020828403121561134d57600080fd5b610f38826110c2565b634e487b7160e01b600052601160045260246000fd5b808201808211156103a5576103a5611356565b6001600160a01b0383168152604060208201819052600090610f35908301846111da565b6000602082840312156113b557600080fd5b5051919050565b600181811c908216806113d057607f821691505b602082108103610ae357634e487b7160e01b600052602260045260246000fd5b601f82111561036f57600081815260208120601f850160051c810160208610156114175750805b601f850160051c820191505b8181101561143657828155600101611423565b505050505050565b815167ffffffffffffffff811115611458576114586110de565b61146c8161146684546113bc565b846113f0565b602080601f8311600181146114a157600084156114895750858301515b600019600386901b1c1916600185901b178555611436565b600085815260208120601f198616915b828110156114d0578886015182559484019460019091019084016114b1565b50858210156114ee5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b67ffffffffffffffff831115611516576115166110de565b61152a8361152483546113bc565b836113f0565b6000601f84116001811461155e57600085156115465750838201355b600019600387901b1c1916600186901b1783556115b8565b600083815260209020601f19861690835b8281101561158f578685013582556020948501946001909201910161156f565b50868210156115ac5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b6001600160801b031986811682528516602082015260806040820181905281018390526000838560a0840137600060a0858401015260a0601f19601f86011683010190508260608301529695505050505050565b60006001820161162557611625611356565b5060010190565b634e487b7160e01b600052603260045260246000fd5b818103818111156103a5576103a5611356565b60006020828403121561166757600080fd5b81518015158114610f3857600080fd5b600082516116898184602087016111b6565b919091019291505056fea2646970667358221220084ace50975668d3c2bd8971aa83637599ad4cf6cd00178a81b7bc1f1516824864736f6c63430008100033a264697066735822122041568e889a39e081d7a6ce17c98800f2528722cc1825e78a2ee72822c38de98964736f6c63430008100033"; type GoldenProtocolConstructorParams = | [signer?: Signer] @@ -170,19 +187,26 @@ export class GoldenProtocol__factory extends ContractFactory { } override deploy( + goldenTokenAddress: string, _minimumVotes: BigNumberish, overrides?: Overrides & { from?: string | Promise } ): Promise { return super.deploy( + goldenTokenAddress, _minimumVotes, overrides || {} ) as Promise; } override getDeployTransaction( + goldenTokenAddress: string, _minimumVotes: BigNumberish, overrides?: Overrides & { from?: string | Promise } ): TransactionRequest { - return super.getDeployTransaction(_minimumVotes, overrides || {}); + return super.getDeployTransaction( + goldenTokenAddress, + _minimumVotes, + overrides || {} + ); } override attach(address: string): GoldenProtocol { return super.attach(address) as GoldenProtocol; diff --git a/typechain/factories/contracts/GoldenToken__factory.ts b/typechain/factories/contracts/GoldenToken__factory.ts index 987f701b..3d41a9ec 100644 --- a/typechain/factories/contracts/GoldenToken__factory.ts +++ b/typechain/factories/contracts/GoldenToken__factory.ts @@ -902,7 +902,7 @@ const _abi = [ ]; const _bytecode = - "0x608060405234801561001057600080fd5b50612b25806100206000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c8063715018a611610125578063a694fc3a116100ad578063dd62ed3e1161007c578063dd62ed3e146104b8578063eb36854e146104cb578063f1127ed8146104de578063f2fde38b1461051b578063fe4b84df1461052e57600080fd5b8063a694fc3a1461046c578063a9059cbb1461047f578063c3cda52014610492578063d505accf146104a557600080fd5b80638da5cb5b116100f45780638da5cb5b1461041a5780638e539e8c1461042b57806395d89b411461043e5780639ab24eb014610446578063a457c2d71461045957600080fd5b8063715018a6146103d95780637cb569de146103e15780637ecebe00146103f457806384144dcf1461040757600080fd5b80633644e515116101a8578063587cde1e11610177578063587cde1e1461031e5780635c19a95c146103625780636c8848c2146103755780636fcfff451461038857806370a08231146103b057600080fd5b80633644e515146102dd57806339509351146102e55780633a46b1a8146102f8578063426233601461030b57600080fd5b806323b62302116101e457806323b623021461027e57806323b872dd146102a85780632e17de78146102bb578063313ce567146102ce57600080fd5b806302fb4d851461021657806306fdde031461022b578063095ea7b31461024957806318160ddd1461026c575b600080fd5b610229610224366004612600565b610541565b005b610233610573565b604051610240919061262a565b60405180910390f35b61025c610257366004612600565b610605565b6040519015158152602001610240565b6035545b604051908152602001610240565b61027061028c366004612678565b6001600160a01b03166000908152610130602052604090205490565b61025c6102b6366004612693565b61061f565b6102296102c93660046126cf565b610643565b60405160128152602001610240565b610270610659565b61025c6102f3366004612600565b610668565b610270610306366004612600565b61068a565b610270610319366004612678565b610709565b61034a61032c366004612678565b6001600160a01b03908116600090815260cc60205260409020541690565b6040516001600160a01b039091168152602001610240565b610229610370366004612678565b610728565b6102296103833660046126e8565b610732565b61039b610396366004612678565b610755565b60405163ffffffff9091168152602001610240565b6102706103be366004612678565b6001600160a01b031660009081526033602052604090205490565b610229610777565b6102296103ef366004612600565b61078b565b610270610402366004612678565b61086c565b6102296104153660046126e8565b61088a565b60fe546001600160a01b031661034a565b6102706104393660046126cf565b6108b7565b610233610913565b610270610454366004612678565b610922565b61025c610467366004612600565b61094f565b61022961047a3660046126cf565b6109ca565b61025c61048d366004612600565b6109d9565b6102296104a0366004612774565b6109e7565b6102296104b33660046127cc565b610b1d565b6102706104c6366004612836565b610c81565b6102296104d93660046126cf565b610cac565b6104f16104ec366004612869565b610d6a565b60408051825163ffffffff1681526020928301516001600160e01b03169281019290925201610240565b610229610529366004612678565b610dee565b61022961053c3660046126cf565b610e64565b610549610ff3565b610553828261078b565b61056f3061056960fe546001600160a01b031690565b8361104d565b5050565b606060368054610582906128a9565b80601f01602080910402602001604051908101604052809291908181526020018280546105ae906128a9565b80156105fb5780601f106105d0576101008083540402835291602001916105fb565b820191906000526020600020905b8154815290600101906020018083116105de57829003601f168201915b5050505050905090565b60003361061381858561122c565b60019150505b92915050565b60003361062d858285611350565b61063885858561104d565b506001949350505050565b61064c81610cac565b6106563033610569565b50565b60006106636113c4565b905090565b60003361061381858561067b8383610c81565b61068591906128f3565b61122c565b60004382106106e05760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e65640060448201526064015b60405180910390fd5b6001600160a01b038316600090815260cd60205260409020610702908361143f565b9392505050565b6001600160a01b03811660009081526101306020526040812054610619565b61065633826114fc565b61073a610ff3565b610745838383611576565b61074f30826109d9565b50505050565b6001600160a01b038116600090815260cd60205260408120546106199061176f565b61077f610ff3565b61078960006117d8565b565b610793610ff3565b6001600160a01b038216600090815261013060205260409020548111156107fc5760405162461bcd60e51b815260206004820152601760248201527f5f736c6173683a20657863656564732062616c616e636500000000000000000060448201526064016106d7565b6001600160a01b0382166000908152610130602052604081208054839290610825908490612906565b90915550506040518181526001600160a01b038316907f4ed05e9673c26d2ed44f7ef6a7f2942df0ee3b5e1e17db4b99f9dcd261a339cd9060200160405180910390a25050565b6001600160a01b038116600090815260996020526040812054610619565b610892610ff3565b600061089f84848461182a565b905061074f3061056960fe546001600160a01b031690565b60004382106109085760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e65640060448201526064016106d7565b61061960ce8361143f565b606060378054610582906128a9565b6001600160a01b0381166000908152610130602052604081205461094583611a73565b61061991906128f3565b6000338161095d8286610c81565b9050838110156109bd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106d7565b610638828686840361122c565b6109d381611afa565b61056f30825b60003361061381858561104d565b83421115610a375760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e6174757265206578706972656400000060448201526064016106d7565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610ab190610aa99060a00160405160208183030381529060405280519060200120611b98565b858585611be6565b9050610abc81611c0e565b8614610b0a5760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e63650000000000000060448201526064016106d7565b610b1481886114fc565b50505050505050565b83421115610b6d5760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016106d7565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610b9c8c611c0e565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610bf782611b98565b90506000610c0782878787611be6565b9050896001600160a01b0316816001600160a01b031614610c6a5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016106d7565b610c758a8a8a61122c565b50505050505050505050565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b3360009081526101306020526040902054811115610d0c5760405162461bcd60e51b815260206004820152601960248201527f5f756e7374616b653a20657863656564732062616c616e63650000000000000060448201526064016106d7565b336000908152610130602052604081208054839290610d2c908490612906565b909155505060405181815233907f79d3df6837cc49ff0e09fd3258e6e45594e0703445bb06825e9d75156eaee8f0906020015b60405180910390a250565b60408051808201909152600080825260208201526001600160a01b038316600090815260cd60205260409020805463ffffffff8416908110610dae57610dae612919565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b610df6610ff3565b6001600160a01b038116610e5b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106d7565b610656816117d8565b600054610100900460ff1615808015610e845750600054600160ff909116105b80610e9e5750303b158015610e9e575060005460ff166001145b610f015760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106d7565b6000805460ff191660011790558015610f24576000805461ff0019166101001790555b610f2c611c36565b610f746040518060400160405280600b81526020016a23b7b63232b72a37b5b2b760a91b8152506040518060400160405280600381526020016211d31160ea1b815250611c65565b610fa06040518060400160405280600b81526020016a23b7b63232b72a37b5b2b760a91b815250611c96565b610faa3383611ce0565b801561056f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b60fe546001600160a01b031633146107895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106d7565b6001600160a01b0383166110b15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106d7565b6001600160a01b0382166111135760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106d7565b61111e838383611cea565b6001600160a01b038316600090815260336020526040902054818110156111965760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106d7565b6001600160a01b038085166000908152603360205260408082208585039055918516815290812080548492906111cd9084906128f3565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161121991815260200190565b60405180910390a361074f848484611d84565b6001600160a01b03831661128e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106d7565b6001600160a01b0382166112ef5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106d7565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061135c8484610c81565b9050600019811461074f57818110156113b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106d7565b61074f848484840361122c565b60006106637f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6113f360655490565b6066546040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b8154600090815b818110156114a357600061145a8284611d8f565b90508486828154811061146f5761146f612919565b60009182526020909120015463ffffffff16111561148f5780925061149d565b61149a8160016128f3565b91505b50611446565b81156114e757846114b5600184612906565b815481106114c5576114c5612919565b60009182526020909120015464010000000090046001600160e01b03166114ea565b60005b6001600160e01b031695945050505050565b6001600160a01b03828116600081815260cc6020818152604080842080546033845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461074f828483611daa565b61157e610ff3565b816115bf5760405162461bcd60e51b815260206004820152601160248201527062756c6b5374616b65203020757365727360781b60448201526064016106d7565b6000811161160f5760405162461bcd60e51b815260206004820152601760248201527f62756c6b5374616b65203020746f74616c416d6f756e7400000000000000000060448201526064016106d7565b6000805b8381101561172757600085858381811061162f5761162f612919565b90506040020160200135905080610130600088888681811061165357611653612919565b6116699260206040909202019081019150612678565b6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461169891906128f3565b909155506116a8905081846128f3565b92508585838181106116bc576116bc612919565b6116d29260206040909202019081019150612678565b6001600160a01b03167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d8260405161170c91815260200190565b60405180910390a2508061171f8161292f565b915050611613565b5081811461074f5760405162461bcd60e51b81526020600482015260156024820152741a5b98dbdc9c9958dd081d1bdd185b105b5bdd5b9d605a1b60448201526064016106d7565b600063ffffffff8211156117d45760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b60648201526084016106d7565b5090565b60fe80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000611834610ff3565b826118765760405162461bcd60e51b81526020600482015260126024820152715f62756c6b536c617368203020757365727360701b60448201526064016106d7565b600082116118c65760405162461bcd60e51b815260206004820152601860248201527f5f62756c6b536c617368203020746f74616c416d6f756e74000000000000000060448201526064016106d7565b60008060005b85811015611a225760008787838181106118e8576118e8612919565b905060400201602001359050600061013060008a8a8681811061190d5761190d612919565b6119239260206040909202019081019150612678565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905060008183116119555782611957565b815b905061198a8a8a8681811061196e5761196e612919565b6119849260206040909202019081019150612678565b8261078b565b61199483876128f3565b95506119a081866128f3565b94508989858181106119b4576119b4612919565b6119ca9260206040909202019081019150612678565b6001600160a01b03167f4ed05e9673c26d2ed44f7ef6a7f2942df0ee3b5e1e17db4b99f9dcd261a339cd82604051611a0491815260200190565b60405180910390a25050508080611a1a9061292f565b9150506118cc565b50838214611a6a5760405162461bcd60e51b81526020600482015260156024820152741a5b98dbdc9c9958dd081d1bdd185b105b5bdd5b9d605a1b60448201526064016106d7565b95945050505050565b6001600160a01b038116600090815260cd60205260408120548015611ae7576001600160a01b038316600090815260cd60205260409020611ab5600183612906565b81548110611ac557611ac5612919565b60009182526020909120015464010000000090046001600160e01b0316611aea565b60005b6001600160e01b03169392505050565b60008111611b415760405162461bcd60e51b815260206004820152601460248201527343616e6e6f74207374616b65206e6f7468696e6760601b60448201526064016106d7565b336000908152610130602052604081208054839290611b619084906128f3565b909155505060405181815233907f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d90602001610d5f565b6000610619611ba56113c4565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000611bf787878787611ee7565b91509150611c0481611fd4565b5095945050505050565b6001600160a01b03811660009081526099602052604090208054600181018255905b50919050565b600054610100900460ff16611c5d5760405162461bcd60e51b81526004016106d790612948565b61078961218a565b600054610100900460ff16611c8c5760405162461bcd60e51b81526004016106d790612948565b61056f82826121ba565b600054610100900460ff16611cbd5760405162461bcd60e51b81526004016106d790612948565b61065681604051806040016040528060018152602001603160f81b8152506121fa565b61056f828261223b565b6001600160a01b0383161580611d0d575060fe546001600160a01b038481169116145b80611d2057506001600160a01b03831630145b80611d3357506001600160a01b03821630145b611d7f5760405162461bcd60e51b815260206004820152601e60248201527f45524332303a204e6f7420616c6c6f77656420746f207472616e73666572000060448201526064016106d7565b505050565b611d7f8383836122c5565b6000611d9e6002848418612993565b610702908484166128f3565b816001600160a01b0316836001600160a01b031614158015611dcc5750600081115b15611d7f576001600160a01b03831615611e5a576001600160a01b038316600090815260cd602052604081208190611e07906122f785612303565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611e4f929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615611d7f576001600160a01b038216600090815260cd602052604081208190611e909061247c85612303565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611ed8929190918252602082015260400190565b60405180910390a25050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611f1e5750600090506003611fcb565b8460ff16601b14158015611f3657508460ff16601c14155b15611f475750600090506004611fcb565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611f9b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611fc457600060019250925050611fcb565b9150600090505b94509492505050565b6000816004811115611fe857611fe86129b5565b03611ff05750565b6001816004811115612004576120046129b5565b036120515760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016106d7565b6002816004811115612065576120656129b5565b036120b25760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106d7565b60038160048111156120c6576120c66129b5565b0361211e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016106d7565b6004816004811115612132576121326129b5565b036106565760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016106d7565b600054610100900460ff166121b15760405162461bcd60e51b81526004016106d790612948565b610789336117d8565b600054610100900460ff166121e15760405162461bcd60e51b81526004016106d790612948565b60366121ed8382612a2f565b506037611d7f8282612a2f565b600054610100900460ff166122215760405162461bcd60e51b81526004016106d790612948565b815160209283012081519190920120606591909155606655565b6122458282612488565b6035546001600160e01b0310156122b75760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b60648201526084016106d7565b61074f60ce61247c83612303565b6001600160a01b03838116600090815260cc6020526040808220548584168352912054611d7f92918216911683611daa565b60006107028284612906565b82546000908190801561234e578561231c600183612906565b8154811061232c5761232c612919565b60009182526020909120015464010000000090046001600160e01b0316612351565b60005b6001600160e01b0316925061236a83858763ffffffff16565b91506000811180156123a857504386612384600184612906565b8154811061239457612394612919565b60009182526020909120015463ffffffff16145b15612408576123b68261257b565b866123c2600184612906565b815481106123d2576123d2612919565b9060005260206000200160000160046101000a8154816001600160e01b0302191690836001600160e01b03160217905550612473565b85604051806040016040528061241d4361176f565b63ffffffff1681526020016124318561257b565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b50935093915050565b600061070282846128f3565b6001600160a01b0382166124de5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106d7565b6124ea60008383611cea565b80603560008282546124fc91906128f3565b90915550506001600160a01b038216600090815260336020526040812080548392906125299084906128f3565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361056f60008383611d84565b60006001600160e01b038211156117d45760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b60648201526084016106d7565b80356001600160a01b03811681146125fb57600080fd5b919050565b6000806040838503121561261357600080fd5b61261c836125e4565b946020939093013593505050565b600060208083528351808285015260005b818110156126575785810183015185820160400152820161263b565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561268a57600080fd5b610702826125e4565b6000806000606084860312156126a857600080fd5b6126b1846125e4565b92506126bf602085016125e4565b9150604084013590509250925092565b6000602082840312156126e157600080fd5b5035919050565b6000806000604084860312156126fd57600080fd5b833567ffffffffffffffff8082111561271557600080fd5b818601915086601f83011261272957600080fd5b81358181111561273857600080fd5b8760208260061b850101111561274d57600080fd5b6020928301989097509590910135949350505050565b803560ff811681146125fb57600080fd5b60008060008060008060c0878903121561278d57600080fd5b612796876125e4565b955060208701359450604087013593506127b260608801612763565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a0312156127e757600080fd5b6127f0886125e4565b96506127fe602089016125e4565b9550604088013594506060880135935061281a60808901612763565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561284957600080fd5b612852836125e4565b9150612860602084016125e4565b90509250929050565b6000806040838503121561287c57600080fd5b612885836125e4565b9150602083013563ffffffff8116811461289e57600080fd5b809150509250929050565b600181811c908216806128bd57607f821691505b602082108103611c3057634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610619576106196128dd565b81810381811115610619576106196128dd565b634e487b7160e01b600052603260045260246000fd5b600060018201612941576129416128dd565b5060010190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000826129b057634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b601f821115611d7f57600081815260208120601f850160051c81016020861015612a085750805b601f850160051c820191505b81811015612a2757828155600101612a14565b505050505050565b815167ffffffffffffffff811115612a4957612a496129cb565b612a5d81612a5784546128a9565b846129e1565b602080601f831160018114612a925760008415612a7a5750858301515b600019600386901b1c1916600185901b178555612a27565b600085815260208120601f198616915b82811015612ac157888601518255948401946001909101908401612aa2565b5085821015612adf5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122088de99e6552bd019389fa2a11f56f598ae5c25e58b57534e90733e372eedc01764736f6c63430008100033"; + "0x608060405234801561001057600080fd5b50612a79806100206000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c8063715018a611610125578063a694fc3a116100ad578063dd62ed3e1161007c578063dd62ed3e146104b8578063eb36854e146104cb578063f1127ed8146104de578063f2fde38b1461051b578063fe4b84df1461052e57600080fd5b8063a694fc3a1461046c578063a9059cbb1461047f578063c3cda52014610492578063d505accf146104a557600080fd5b80638da5cb5b116100f45780638da5cb5b1461041a5780638e539e8c1461042b57806395d89b411461043e5780639ab24eb014610446578063a457c2d71461045957600080fd5b8063715018a6146103d95780637cb569de146103e15780637ecebe00146103f457806384144dcf1461040757600080fd5b80633644e515116101a8578063587cde1e11610177578063587cde1e1461031e5780635c19a95c146103625780636c8848c2146103755780636fcfff451461038857806370a08231146103b057600080fd5b80633644e515146102dd57806339509351146102e55780633a46b1a8146102f8578063426233601461030b57600080fd5b806323b62302116101e457806323b623021461027e57806323b872dd146102a85780632e17de78146102bb578063313ce567146102ce57600080fd5b806302fb4d851461021657806306fdde031461022b578063095ea7b31461024957806318160ddd1461026c575b600080fd5b610229610224366004612554565b610541565b005b610233610573565b604051610240919061257e565b60405180910390f35b61025c610257366004612554565b610605565b6040519015158152602001610240565b6035545b604051908152602001610240565b61027061028c3660046125cc565b6001600160a01b03166000908152610130602052604090205490565b61025c6102b63660046125e7565b61061f565b6102296102c9366004612623565b610643565b60405160128152602001610240565b610270610659565b61025c6102f3366004612554565b610668565b610270610306366004612554565b61068a565b6102706103193660046125cc565b610709565b61034a61032c3660046125cc565b6001600160a01b03908116600090815260cc60205260409020541690565b6040516001600160a01b039091168152602001610240565b6102296103703660046125cc565b610728565b61022961038336600461263c565b610732565b61039b6103963660046125cc565b610755565b60405163ffffffff9091168152602001610240565b6102706103be3660046125cc565b6001600160a01b031660009081526033602052604090205490565b610229610777565b6102296103ef366004612554565b61078b565b6102706104023660046125cc565b61086c565b61022961041536600461263c565b61088a565b60fe546001600160a01b031661034a565b610270610439366004612623565b6108b7565b610233610913565b6102706104543660046125cc565b610922565b61025c610467366004612554565b61094f565b61022961047a366004612623565b6109ca565b61025c61048d366004612554565b6109d9565b6102296104a03660046126c8565b6109e7565b6102296104b3366004612720565b610b1d565b6102706104c636600461278a565b610c81565b6102296104d9366004612623565b610cac565b6104f16104ec3660046127bd565b610d6a565b60408051825163ffffffff1681526020928301516001600160e01b03169281019290925201610240565b6102296105293660046125cc565b610dee565b61022961053c366004612623565b610e64565b610549610ff3565b610553828261078b565b61056f3061056960fe546001600160a01b031690565b8361104d565b5050565b606060368054610582906127fd565b80601f01602080910402602001604051908101604052809291908181526020018280546105ae906127fd565b80156105fb5780601f106105d0576101008083540402835291602001916105fb565b820191906000526020600020905b8154815290600101906020018083116105de57829003601f168201915b5050505050905090565b600033610613818585611221565b60019150505b92915050565b60003361062d858285611345565b61063885858561104d565b506001949350505050565b61064c81610cac565b6106563033610569565b50565b60006106636113b9565b905090565b60003361061381858561067b8383610c81565b6106859190612847565b611221565b60004382106106e05760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e65640060448201526064015b60405180910390fd5b6001600160a01b038316600090815260cd602052604090206107029083611434565b9392505050565b6001600160a01b03811660009081526101306020526040812054610619565b61065633826114f1565b61073a610ff3565b61074583838361156b565b61074f30826109d9565b50505050565b6001600160a01b038116600090815260cd602052604081205461061990611764565b61077f610ff3565b61078960006117cd565b565b610793610ff3565b6001600160a01b038216600090815261013060205260409020548111156107fc5760405162461bcd60e51b815260206004820152601760248201527f5f736c6173683a20657863656564732062616c616e636500000000000000000060448201526064016106d7565b6001600160a01b038216600090815261013060205260408120805483929061082590849061285a565b90915550506040518181526001600160a01b038316907f4ed05e9673c26d2ed44f7ef6a7f2942df0ee3b5e1e17db4b99f9dcd261a339cd9060200160405180910390a25050565b6001600160a01b038116600090815260996020526040812054610619565b610892610ff3565b600061089f84848461181f565b905061074f3061056960fe546001600160a01b031690565b60004382106109085760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e65640060448201526064016106d7565b61061960ce83611434565b606060378054610582906127fd565b6001600160a01b0381166000908152610130602052604081205461094583611a68565b6106199190612847565b6000338161095d8286610c81565b9050838110156109bd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106d7565b6106388286868403611221565b6109d381611aef565b61056f30825b60003361061381858561104d565b83421115610a375760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e6174757265206578706972656400000060448201526064016106d7565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610ab190610aa99060a00160405160208183030381529060405280519060200120611b8d565b858585611bdb565b9050610abc81611c03565b8614610b0a5760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e63650000000000000060448201526064016106d7565b610b1481886114f1565b50505050505050565b83421115610b6d5760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016106d7565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610b9c8c611c03565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610bf782611b8d565b90506000610c0782878787611bdb565b9050896001600160a01b0316816001600160a01b031614610c6a5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016106d7565b610c758a8a8a611221565b50505050505050505050565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b3360009081526101306020526040902054811115610d0c5760405162461bcd60e51b815260206004820152601960248201527f5f756e7374616b653a20657863656564732062616c616e63650000000000000060448201526064016106d7565b336000908152610130602052604081208054839290610d2c90849061285a565b909155505060405181815233907f79d3df6837cc49ff0e09fd3258e6e45594e0703445bb06825e9d75156eaee8f0906020015b60405180910390a250565b60408051808201909152600080825260208201526001600160a01b038316600090815260cd60205260409020805463ffffffff8416908110610dae57610dae61286d565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b610df6610ff3565b6001600160a01b038116610e5b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106d7565b610656816117cd565b600054610100900460ff1615808015610e845750600054600160ff909116105b80610e9e5750303b158015610e9e575060005460ff166001145b610f015760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106d7565b6000805460ff191660011790558015610f24576000805461ff0019166101001790555b610f2c611c2b565b610f746040518060400160405280600b81526020016a23b7b63232b72a37b5b2b760a91b8152506040518060400160405280600381526020016211d31160ea1b815250611c5a565b610fa06040518060400160405280600b81526020016a23b7b63232b72a37b5b2b760a91b815250611c8b565b610faa3383611cd5565b801561056f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b60fe546001600160a01b031633146107895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106d7565b6001600160a01b0383166110b15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106d7565b6001600160a01b0382166111135760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106d7565b6001600160a01b0383166000908152603360205260409020548181101561118b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106d7565b6001600160a01b038085166000908152603360205260408082208585039055918516815290812080548492906111c2908490612847565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161120e91815260200190565b60405180910390a361074f848484611ce4565b6001600160a01b0383166112835760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106d7565b6001600160a01b0382166112e45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106d7565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006113518484610c81565b9050600019811461074f57818110156113ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106d7565b61074f8484848403611221565b60006106637f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6113e860655490565b6066546040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b8154600090815b8181101561149857600061144f8284611cef565b9050848682815481106114645761146461286d565b60009182526020909120015463ffffffff16111561148457809250611492565b61148f816001612847565b91505b5061143b565b81156114dc57846114aa60018461285a565b815481106114ba576114ba61286d565b60009182526020909120015464010000000090046001600160e01b03166114df565b60005b6001600160e01b031695945050505050565b6001600160a01b03828116600081815260cc6020818152604080842080546033845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461074f828483611d0a565b611573610ff3565b816115b45760405162461bcd60e51b815260206004820152601160248201527062756c6b5374616b65203020757365727360781b60448201526064016106d7565b600081116116045760405162461bcd60e51b815260206004820152601760248201527f62756c6b5374616b65203020746f74616c416d6f756e7400000000000000000060448201526064016106d7565b6000805b8381101561171c5760008585838181106116245761162461286d565b9050604002016020013590508061013060008888868181106116485761164861286d565b61165e92602060409092020190810191506125cc565b6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461168d9190612847565b9091555061169d90508184612847565b92508585838181106116b1576116b161286d565b6116c792602060409092020190810191506125cc565b6001600160a01b03167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d8260405161170191815260200190565b60405180910390a2508061171481612883565b915050611608565b5081811461074f5760405162461bcd60e51b81526020600482015260156024820152741a5b98dbdc9c9958dd081d1bdd185b105b5bdd5b9d605a1b60448201526064016106d7565b600063ffffffff8211156117c95760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b60648201526084016106d7565b5090565b60fe80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000611829610ff3565b8261186b5760405162461bcd60e51b81526020600482015260126024820152715f62756c6b536c617368203020757365727360701b60448201526064016106d7565b600082116118bb5760405162461bcd60e51b815260206004820152601860248201527f5f62756c6b536c617368203020746f74616c416d6f756e74000000000000000060448201526064016106d7565b60008060005b85811015611a175760008787838181106118dd576118dd61286d565b905060400201602001359050600061013060008a8a868181106119025761190261286d565b61191892602060409092020190810191506125cc565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050600081831161194a578261194c565b815b905061197f8a8a868181106119635761196361286d565b61197992602060409092020190810191506125cc565b8261078b565b6119898387612847565b95506119958186612847565b94508989858181106119a9576119a961286d565b6119bf92602060409092020190810191506125cc565b6001600160a01b03167f4ed05e9673c26d2ed44f7ef6a7f2942df0ee3b5e1e17db4b99f9dcd261a339cd826040516119f991815260200190565b60405180910390a25050508080611a0f90612883565b9150506118c1565b50838214611a5f5760405162461bcd60e51b81526020600482015260156024820152741a5b98dbdc9c9958dd081d1bdd185b105b5bdd5b9d605a1b60448201526064016106d7565b95945050505050565b6001600160a01b038116600090815260cd60205260408120548015611adc576001600160a01b038316600090815260cd60205260409020611aaa60018361285a565b81548110611aba57611aba61286d565b60009182526020909120015464010000000090046001600160e01b0316611adf565b60005b6001600160e01b03169392505050565b60008111611b365760405162461bcd60e51b815260206004820152601460248201527343616e6e6f74207374616b65206e6f7468696e6760601b60448201526064016106d7565b336000908152610130602052604081208054839290611b56908490612847565b909155505060405181815233907f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d90602001610d5f565b6000610619611b9a6113b9565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000611bec87878787611e47565b91509150611bf981611f34565b5095945050505050565b6001600160a01b03811660009081526099602052604090208054600181018255905b50919050565b600054610100900460ff16611c525760405162461bcd60e51b81526004016106d79061289c565b6107896120ea565b600054610100900460ff16611c815760405162461bcd60e51b81526004016106d79061289c565b61056f828261211a565b600054610100900460ff16611cb25760405162461bcd60e51b81526004016106d79061289c565b61065681604051806040016040528060018152602001603160f81b81525061215a565b61056f828261219b565b505050565b611cdf838383612225565b6000611cfe60028484186128e7565b61070290848416612847565b816001600160a01b0316836001600160a01b031614158015611d2c5750600081115b15611cdf576001600160a01b03831615611dba576001600160a01b038316600090815260cd602052604081208190611d679061225785612263565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611daf929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615611cdf576001600160a01b038216600090815260cd602052604081208190611df0906123dc85612263565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611e38929190918252602082015260400190565b60405180910390a25050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611e7e5750600090506003611f2b565b8460ff16601b14158015611e9657508460ff16601c14155b15611ea75750600090506004611f2b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611efb573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611f2457600060019250925050611f2b565b9150600090505b94509492505050565b6000816004811115611f4857611f48612909565b03611f505750565b6001816004811115611f6457611f64612909565b03611fb15760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016106d7565b6002816004811115611fc557611fc5612909565b036120125760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106d7565b600381600481111561202657612026612909565b0361207e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016106d7565b600481600481111561209257612092612909565b036106565760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016106d7565b600054610100900460ff166121115760405162461bcd60e51b81526004016106d79061289c565b610789336117cd565b600054610100900460ff166121415760405162461bcd60e51b81526004016106d79061289c565b603661214d8382612983565b506037611cdf8282612983565b600054610100900460ff166121815760405162461bcd60e51b81526004016106d79061289c565b815160209283012081519190920120606591909155606655565b6121a582826123e8565b6035546001600160e01b0310156122175760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b60648201526084016106d7565b61074f60ce6123dc83612263565b6001600160a01b03838116600090815260cc6020526040808220548584168352912054611cdf92918216911683611d0a565b6000610702828461285a565b8254600090819080156122ae578561227c60018361285a565b8154811061228c5761228c61286d565b60009182526020909120015464010000000090046001600160e01b03166122b1565b60005b6001600160e01b031692506122ca83858763ffffffff16565b9150600081118015612308575043866122e460018461285a565b815481106122f4576122f461286d565b60009182526020909120015463ffffffff16145b1561236857612316826124cf565b8661232260018461285a565b815481106123325761233261286d565b9060005260206000200160000160046101000a8154816001600160e01b0302191690836001600160e01b031602179055506123d3565b85604051806040016040528061237d43611764565b63ffffffff168152602001612391856124cf565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b50935093915050565b60006107028284612847565b6001600160a01b03821661243e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106d7565b80603560008282546124509190612847565b90915550506001600160a01b0382166000908152603360205260408120805483929061247d908490612847565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361056f60008383611ce4565b60006001600160e01b038211156117c95760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b60648201526084016106d7565b80356001600160a01b038116811461254f57600080fd5b919050565b6000806040838503121561256757600080fd5b61257083612538565b946020939093013593505050565b600060208083528351808285015260005b818110156125ab5785810183015185820160400152820161258f565b506000604082860101526040601f19601f8301168501019250505092915050565b6000602082840312156125de57600080fd5b61070282612538565b6000806000606084860312156125fc57600080fd5b61260584612538565b925061261360208501612538565b9150604084013590509250925092565b60006020828403121561263557600080fd5b5035919050565b60008060006040848603121561265157600080fd5b833567ffffffffffffffff8082111561266957600080fd5b818601915086601f83011261267d57600080fd5b81358181111561268c57600080fd5b8760208260061b85010111156126a157600080fd5b6020928301989097509590910135949350505050565b803560ff8116811461254f57600080fd5b60008060008060008060c087890312156126e157600080fd5b6126ea87612538565b95506020870135945060408701359350612706606088016126b7565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561273b57600080fd5b61274488612538565b965061275260208901612538565b9550604088013594506060880135935061276e608089016126b7565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561279d57600080fd5b6127a683612538565b91506127b460208401612538565b90509250929050565b600080604083850312156127d057600080fd5b6127d983612538565b9150602083013563ffffffff811681146127f257600080fd5b809150509250929050565b600181811c9082168061281157607f821691505b602082108103611c2557634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561061957610619612831565b8181038181111561061957610619612831565b634e487b7160e01b600052603260045260246000fd5b60006001820161289557612895612831565b5060010190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60008261290457634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b601f821115611cdf57600081815260208120601f850160051c8101602086101561295c5750805b601f850160051c820191505b8181101561297b57828155600101612968565b505050505050565b815167ffffffffffffffff81111561299d5761299d61291f565b6129b1816129ab84546127fd565b84612935565b602080601f8311600181146129e657600084156129ce5750858301515b600019600386901b1c1916600185901b17855561297b565b600085815260208120601f198616915b82811015612a15578886015182559484019460019091019084016129f6565b5085821015612a335787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea2646970667358221220cfc17cc526fee7249ae6cb48777b0417d1be7aa7a88ff9f6cf8e7df03b449eb864736f6c63430008100033"; type GoldenTokenConstructorParams = | [signer?: Signer] From 67395eafc5f97c511ab3cb1b34ddc468e793bc06 Mon Sep 17 00:00:00 2001 From: Dave Hrdlicka Date: Tue, 25 Oct 2022 15:15:09 +0200 Subject: [PATCH 6/8] Refactor payout flows to support all actors --- contracts/GoldenBounty.sol | 318 +++++++++++ contracts/GoldenProtocol.sol | 207 ------- ..._GoldenProtocol.ts => 999_GoldenBounty.ts} | 4 +- test/{GoldenProtocol.ts => GoldenBounty.ts} | 113 ++-- test/utils/index.ts | 10 +- .../GoldenBounty.sol/GoldenBounty.ts | 304 ++++++++++ .../GoldenBounty.sol/GoldenBountyQuestion.ts | 534 ++++++++++++++++++ typechain/contracts/GoldenBounty.sol/index.ts | 5 + typechain/contracts/index.ts | 4 +- .../GoldenBountyQuestion__factory.ts | 508 +++++++++++++++++ .../GoldenBounty.sol/GoldenBounty__factory.ts | 229 ++++++++ .../contracts/GoldenBounty.sol/index.ts | 5 + typechain/factories/contracts/index.ts | 2 +- typechain/index.ts | 8 +- 14 files changed, 1978 insertions(+), 273 deletions(-) create mode 100644 contracts/GoldenBounty.sol delete mode 100644 contracts/GoldenProtocol.sol rename deploy/{999_GoldenProtocol.ts => 999_GoldenBounty.ts} (88%) rename test/{GoldenProtocol.ts => GoldenBounty.ts} (57%) create mode 100644 typechain/contracts/GoldenBounty.sol/GoldenBounty.ts create mode 100644 typechain/contracts/GoldenBounty.sol/GoldenBountyQuestion.ts create mode 100644 typechain/contracts/GoldenBounty.sol/index.ts create mode 100644 typechain/factories/contracts/GoldenBounty.sol/GoldenBountyQuestion__factory.ts create mode 100644 typechain/factories/contracts/GoldenBounty.sol/GoldenBounty__factory.ts create mode 100644 typechain/factories/contracts/GoldenBounty.sol/index.ts diff --git a/contracts/GoldenBounty.sol b/contracts/GoldenBounty.sol new file mode 100644 index 00000000..7a2b8f45 --- /dev/null +++ b/contracts/GoldenBounty.sol @@ -0,0 +1,318 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.16; + +import '@openzeppelin/contracts/access/Ownable.sol'; +import '@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol'; + +import './GoldenToken.sol'; +import './libraries/AddressSet.sol'; + +/// @custom:security-contact security@golden.com +contract GoldenBounty is Ownable { + using SafeERC20Upgradeable for GoldenToken; + GoldenToken tokenContract; + uint256 public minimumVotes; + + event QuestionCreated( + address indexed questionAddress, + bytes16 subjectUUID, + bytes16 predicateUUID + ); + + constructor(address goldenTokenAddress, uint256 _minimumVotes) Ownable() { + tokenContract = GoldenToken(goldenTokenAddress); + minimumVotes = _minimumVotes; + } + + function setMinimumVotes(uint256 _minimumVotes) public onlyOwner { + minimumVotes = _minimumVotes; + } + + function createQuestion( + bytes16 subjectUUID, + bytes16 predicateUUID, + uint256 bounty + ) public returns (address) { + require( + bounty % 10**tokenContract.decimals() == 0, + 'GoldenBounty: Bounty must be a multiple of 1 GoldenToken' + ); + require( + tokenContract.allowance(_msgSender(), address(this)) >= bounty, + 'GoldenBounty: insufficient allowance' + ); + GoldenBountyQuestion newQuestion = new GoldenBountyQuestion( + address(tokenContract), + _msgSender(), + subjectUUID, + predicateUUID + ); + address newQuestionAddress = address(newQuestion); + tokenContract.safeTransferFrom( + _msgSender(), + newQuestionAddress, + bounty + ); + emit QuestionCreated(newQuestionAddress, subjectUUID, predicateUUID); + return newQuestionAddress; + } +} + +contract GoldenBountyQuestion is Ownable { + using SafeERC20Upgradeable for GoldenToken; + GoldenToken tokenContract; + + using AddressSet for AddressSet.Set; + + address public asker; + bytes16 public subjectUUID; + bytes16 public predicateUUID; + + // Helper struct for consensus/payout algorithms + struct Answer { + string answer; + address answerer; + AddressSet.Set yesVoters; + AddressSet.Set noVoters; + } + + struct AnswerPublic { + string answer; + address answerer; + address[] yesVoters; + address[] noVoters; + } + + // Mapping of answerer address to their answer + mapping(address => Answer) answerByAnswerer; + AddressSet.Set answerers; + + enum AnswerStatus { + Pending, + Accepted, + Rejected + } + + event AnswerAdded( + bytes16 subjectUUID, + bytes16 predicateUUID, + string answer, + uint256 index + ); + + constructor( + address goldenTokenAddress, + address _asker, + bytes16 _subjectUUID, + bytes16 _predicateUUID + ) Ownable() { + require( + _asker != address(0), + 'GoldenBountyQuestion: asker is the zero address' + ); + tokenContract = GoldenToken(goldenTokenAddress); + asker = _asker; + subjectUUID = _subjectUUID; + predicateUUID = _predicateUUID; + } + + modifier onlyAsker() { + require(_msgSender() == asker, 'GoldenBountyQuestion: onlyAsker'); + _; + } + + function bounty() public view returns (uint256) { + return tokenContract.balanceOf(address(this)); + } + + function addAnswer(string calldata _answer) public { + require( + bytes(_answer).length > 0, + 'GoldenBountyQuestion: answer is empty' + ); + address answerer = _msgSender(); + Answer storage a = answerByAnswerer[answerer]; + a.answer = _answer; + a.answerer = answerer; + answerers.upsert(answerer); + + emit AnswerAdded( + subjectUUID, + predicateUUID, + _answer, + answerers.indexOfKey(answerer) + ); + } + + function answers() public view returns (AnswerPublic[] memory) { + AnswerPublic[] memory _ans = new AnswerPublic[](answerers.count()); + for (uint256 i = 0; i < answerers.count(); i++) { + address answerer = answerers.keyAtIndex(i); + Answer storage a = answerByAnswerer[answerer]; + _ans[i] = AnswerPublic( + a.answer, + a.answerer, + a.yesVoters.keyList, + a.noVoters.keyList + ); + } + return _ans; + } + + function answers(AnswerStatus status) + public + view + returns (AnswerPublic[] memory) + { + AnswerPublic[] memory _ans = new AnswerPublic[](answerers.count()); + uint256 acceptedAnswersCount = 0; + for (uint256 i = 0; i < answerers.count(); i++) { + address answerer = answerers.keyAtIndex(i); + Answer storage a = answerByAnswerer[answerer]; + AnswerStatus answerStatus = _answerStatus(a); + if (answerStatus == status) { + _ans[acceptedAnswersCount] = AnswerPublic( + a.answer, + a.answerer, + a.yesVoters.keyList, + a.noVoters.keyList + ); + acceptedAnswersCount++; + } + } + return _ans; + } + + function acceptedAnswers() public view returns (AnswerPublic[] memory) { + return answers(AnswerStatus.Accepted); + } + + function rejectedAnswers() public view returns (AnswerPublic[] memory) { + return answers(AnswerStatus.Rejected); + } + + function pendingAnswers() public view returns (AnswerPublic[] memory) { + return answers(AnswerStatus.Pending); + } + + function vote(uint256 index, bool isCorrect) public { + require( + answerers.count() > index, + 'GoldenBountyQuestion: there is no answer at that index' + ); + + Answer storage answer = answerByAnswerer[answerers.keyAtIndex(index)]; + address voter = _msgSender(); + + require( + answer.yesVoters.exists(voter) == false && + answer.noVoters.exists(voter) == false, + 'GoldenBountyQuestion: you have already voted' + ); + + if (isCorrect) { + answer.yesVoters.insert(voter); + } else { + answer.noVoters.insert(voter); + } + } + + function topAnswer() public view returns (AnswerPublic memory) { + Answer storage a = _topAnswer(); + return + AnswerPublic( + a.answer, + a.answerer, + a.yesVoters.keyList, + a.noVoters.keyList + ); + } + + function _topAnswer() internal view returns (Answer storage) { + uint256 maxVotes = 0; + uint256 maxIndex = 0; + for (uint256 i = 0; i < answerers.count(); i++) { + Answer storage answer = answerByAnswerer[answerers.keyAtIndex(i)]; + AnswerStatus answerStatus = _answerStatus(answer); + if (answerStatus == AnswerStatus.Accepted) { + uint256 votes = answer.yesVoters.count(); + if (votes > maxVotes) { + maxVotes = votes; + maxIndex = i; + } + } + } + return answerByAnswerer[answerers.keyAtIndex(maxIndex)]; + } + + function payout() public onlyAsker { + AnswerPublic[] memory _acceptedAnswers = acceptedAnswers(); + address[] memory answerersToPay = new address[]( + _acceptedAnswers.length + ); + + uint256 votersLength = 0; + for (uint256 i = 0; i < _acceptedAnswers.length; i++) { + answerersToPay[i] = _acceptedAnswers[i].answerer; + votersLength += _acceptedAnswers[i].yesVoters.length; + } + + address[] memory votersToPay = new address[](votersLength); + uint256 voterIndex = 0; + for (uint256 i = 0; i < _acceptedAnswers.length; i++) { + for (uint256 j = 0; j < _acceptedAnswers[i].yesVoters.length; j++) { + votersToPay[voterIndex] = _acceptedAnswers[i].yesVoters[j]; + voterIndex++; + } + } + + // `bounty()` value is in the order of `tokenContract.decimals()` (10^18) + // so should be divisible by 10 + // let's pay: + // - 6/10 to the answerer + // - 3/10 to the voters + // - 1/10 and any rounding remainders to the protocol + uint256 _bounty = bounty(); + _payoutAmountToAddresses((_bounty / 10) * 6, answerersToPay); + _payoutAmountToAddresses((_bounty / 10) * 3, votersToPay); + // Send any left over to the protocol + tokenContract.safeTransfer(owner(), bounty()); + } + + // Utils + function _answerStatus(Answer storage answer) + internal + view + returns (AnswerStatus) + { + int256 voteDiff = int256(answer.yesVoters.count()) - + int256(answer.noVoters.count()); + int256 minimumVotes = int256(GoldenBounty(owner()).minimumVotes()); + + if (voteDiff >= minimumVotes) { + return AnswerStatus.Accepted; + } + + if (voteDiff <= -minimumVotes) { + return AnswerStatus.Rejected; + } + + return AnswerStatus.Pending; + } + + function _payoutAmountToAddresses( + uint256 amount, + address[] memory addresses + ) internal { + uint256 amountPaid = 0; + uint256 amountPerAddress = amount / addresses.length; + for (uint256 i = 0; i < addresses.length; i++) { + tokenContract.safeTransfer(addresses[i], amountPerAddress); + amountPaid += amountPerAddress; + } + // Send any left over to the protocol + if (amountPaid < amount) { + tokenContract.safeTransfer(owner(), amount - amountPaid); + } + } +} diff --git a/contracts/GoldenProtocol.sol b/contracts/GoldenProtocol.sol deleted file mode 100644 index dea0b213..00000000 --- a/contracts/GoldenProtocol.sol +++ /dev/null @@ -1,207 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.16; - -import '@openzeppelin/contracts/access/Ownable.sol'; -import '@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol'; - -import './GoldenToken.sol'; -import './libraries/AddressSet.sol'; - -/// @custom:security-contact security@golden.com -contract GoldenProtocol is Ownable { - using SafeERC20Upgradeable for GoldenToken; - GoldenToken tokenContract; - uint256 public minimumVotes; - - event QuestionCreated( - address indexed questionAddress, - bytes16 subjectUUID, - bytes16 predicateUUID - ); - - constructor(address goldenTokenAddress, uint256 _minimumVotes) Ownable() { - tokenContract = GoldenToken(goldenTokenAddress); - minimumVotes = _minimumVotes; - } - - function setMinimumVotes(uint256 _minimumVotes) public onlyOwner { - minimumVotes = _minimumVotes; - } - - function createQuestion( - bytes16 subjectUUID, - bytes16 predicateUUID, - uint256 bounty - ) public returns (address) { - require( - tokenContract.allowance(_msgSender(), address(this)) >= bounty, - 'GoldenProtocol: insufficient allowance' - ); - - // TODO: Creating new contracts is going to be very expensive. - // Is there a cheaper alternative to encapsulate the question logic? - GoldenProtocolQuestion newQuestion = new GoldenProtocolQuestion( - address(tokenContract), - msg.sender, - subjectUUID, - predicateUUID - ); - address newQuestionAddress = address(newQuestion); - tokenContract.safeTransferFrom( - _msgSender(), - newQuestionAddress, - bounty - ); - emit QuestionCreated(newQuestionAddress, subjectUUID, predicateUUID); - return newQuestionAddress; - } -} - -contract GoldenProtocolQuestion is Ownable { - using SafeERC20Upgradeable for GoldenToken; - GoldenToken tokenContract; - - using AddressSet for AddressSet.Set; - - address public asker; - bytes16 public subjectUUID; - bytes16 public predicateUUID; - string public answer; - - AddressSet.Set answerers; - AddressSet.Set verifiers; - - // Mapping of answerer address to their answer - mapping(address => string) answerByAnswerer; - - // Mapping of voter address to the index of an answer - mapping(address => uint256) answerIndexByVerifier; - - // Mapping of answerer address to their vote count (score) - mapping(address => uint256) voteCountByAnswerer; - - // Helper struct for consensus/payout algorithms - struct Answer { - address answerer; - string answer; - uint256 voteCount; - } - - event AnswerAdded( - bytes16 subjectUUID, - bytes16 predicateUUID, - string answer, - uint256 index - ); - - constructor( - address goldenTokenAddress, - address _asker, - bytes16 _subjectUUID, - bytes16 _predicateUUID - ) Ownable() { - require( - _asker != address(0), - 'GoldenProtocolQuestion: asker is the zero address' - ); - tokenContract = GoldenToken(goldenTokenAddress); - asker = _asker; - subjectUUID = _subjectUUID; - predicateUUID = _predicateUUID; - } - - modifier onlyAsker() { - require(msg.sender == asker, 'GoldenProtocolQuestion: onlyAsker'); - _; - } - - function bounty() public view returns (uint256) { - return tokenContract.balanceOf(address(this)); - } - - function addAnswer(string calldata _answer) public { - require( - bytes(_answer).length > 0, - 'GoldenProtocolQuestion: answer is empty' - ); - - address answerer = msg.sender; - answerByAnswerer[answerer] = _answer; - answerers.upsert(answerer); - voteCountByAnswerer[answerer] = 0; - emit AnswerAdded( - subjectUUID, - predicateUUID, - _answer, - answerers.indexOfKey(answerer) - ); - } - - function answers() public view returns (Answer[] memory) { - Answer[] memory _answers = new Answer[](answerers.count()); - for (uint256 i = 0; i < answerers.count(); i++) { - address answerer = answerers.keyAtIndex(i); - _answers[i] = Answer( - answerer, - answerByAnswerer[answerer], - voteCountByAnswerer[answerer] - ); - } - return _answers; - } - - function upvote(uint256 index) public { - require( - answerers.count() > index, - 'GoldenProtocolQuestion: there is no answer at that index' - ); - require( - answerIndexByVerifier[msg.sender] == 0, - 'GoldenProtocolQuestion: you have already voted' - ); - - address answerer = answerers.keyAtIndex(index); - address verifier = msg.sender; - voteCountByAnswerer[answerer] += 1; - answerIndexByVerifier[verifier] = index; - verifiers.upsert(verifier); - } - - function topAnswer() public view returns (Answer memory) { - uint256 maxVotes = 0; - uint256 maxVotesIndex = 0; - for (uint256 i = 0; i < answerers.count(); i++) { - uint256 voteCount = voteCountByAnswerer[answerers.keyAtIndex(i)]; - if (voteCount >= maxVotes) { - maxVotes = voteCount; - maxVotesIndex = i; - } - } - address answerer = answerers.keyAtIndex(maxVotesIndex); - return (Answer(answerer, answerByAnswerer[answerer], maxVotes)); - } - - function payout() public onlyAsker { - Answer memory _topAnswer = topAnswer(); - require( - GoldenProtocol(owner()).minimumVotes() <= _topAnswer.voteCount, - 'GoldenProtocolQuestion: payout: minimumVotes not met' - ); - answer = _topAnswer.answer; - address payable answerer = payable(_topAnswer.answerer); - tokenContract.safeTransfer( - answerer, - // TODO: Skim a small fee for the voters and protocol - tokenContract.balanceOf(address(this)) - ); - } - - // Utils - function hashAnswer(address answerer, string memory value) - public - pure - returns (uint256) - { - return uint256(keccak256(abi.encode(answerer, value))); - } -} diff --git a/deploy/999_GoldenProtocol.ts b/deploy/999_GoldenBounty.ts similarity index 88% rename from deploy/999_GoldenProtocol.ts rename to deploy/999_GoldenBounty.ts index a1d62c1a..509860ea 100644 --- a/deploy/999_GoldenProtocol.ts +++ b/deploy/999_GoldenBounty.ts @@ -8,7 +8,7 @@ const deploy: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { const GoldenTokenDeployment = await deployments.get('GoldenToken'); - await deployments.deploy('GoldenProtocol', { + await deployments.deploy('GoldenBounty', { from: deployer, // skipIfAlreadyDeployed: true, args: [GoldenTokenDeployment.address, 3], @@ -17,7 +17,7 @@ const deploy: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { }; deploy.id = 'deploy_golden_protocol'; -deploy.tags = ['GoldenProtocol']; +deploy.tags = ['GoldenBounty']; deploy.dependencies = ['GoldenToken']; export default deploy; diff --git a/test/GoldenProtocol.ts b/test/GoldenBounty.ts similarity index 57% rename from test/GoldenProtocol.ts rename to test/GoldenBounty.ts index 7b730d78..de4e49f5 100644 --- a/test/GoldenProtocol.ts +++ b/test/GoldenBounty.ts @@ -9,20 +9,20 @@ import { import { setupUsers, setupUser, User, Contracts as _Contracts } from './utils'; import getRandomBytesHexString from './utils/getRandomBytesHexString'; import { - GoldenProtocol as GoldenProtocolContract, - GoldenProtocolQuestion as GoldenProtocolQuestionContract, -} from '../typechain/contracts/GoldenProtocol.sol'; -import { QuestionCreatedEvent } from '../typechain/contracts/GoldenProtocol.sol/GoldenProtocol'; -import { AnswerAddedEvent } from '../typechain/contracts/GoldenProtocol.sol/GoldenProtocolQuestion'; + GoldenBounty as GoldenBountyContract, + GoldenBountyQuestion as GoldenBountyQuestionContract, +} from '../typechain/contracts/GoldenBounty.sol'; +import { QuestionCreatedEvent } from '../typechain/contracts/GoldenBounty.sol/GoldenBounty'; +import { AnswerAddedEvent } from '../typechain/contracts/GoldenBounty.sol/GoldenBountyQuestion'; import { GoldenToken as GoldenTokenContract } from '../typechain/'; type Contracts = Pick< _Contracts, - 'GoldenProtocol' | 'GoldenProtocolQuestion' | 'GoldenToken' + 'GoldenBounty' | 'GoldenBountyQuestion' | 'GoldenToken' >; -describe('GoldenProtocol', function () { - let GoldenProtocol: Contracts['GoldenProtocol']; +describe('GoldenBounty', function () { + let GoldenBounty: Contracts['GoldenBounty']; let GoldenToken: Contracts['GoldenToken']; let owner: User; let users: User[]; @@ -32,12 +32,12 @@ describe('GoldenProtocol', function () { const answer = 'Profound truth'; beforeEach(async function () { - await deployments.fixture(['GoldenProtocol']); - GoldenProtocol = await ethers.getContract( - 'GoldenProtocol' + await deployments.fixture(['GoldenBounty']); + GoldenBounty = await ethers.getContract( + 'GoldenBounty' ); GoldenToken = await ethers.getContract('GoldenToken'); - const contracts = { GoldenProtocol, GoldenToken }; + const contracts = { GoldenBounty, GoldenToken }; const { deployer } = await getNamedAccounts(); owner = await setupUser(deployer, contracts); users = await setupUsers(await getUnnamedAccounts(), contracts); @@ -48,23 +48,21 @@ describe('GoldenProtocol', function () { describe('Deployment', function () { it('Should have correct owner', async function () { - expect(await GoldenProtocol.owner()).to.equal(owner.address); + expect(await GoldenBounty.owner()).to.equal(owner.address); }); }); describe('Question', function () { const subjectUUID = getRandomBytesHexString(16); const predicateUUID = getRandomBytesHexString(16); - const bounty = ethers.BigNumber.from(10); - let GoldenProtocolQuestion: NonNullable< - Contracts['GoldenProtocolQuestion'] - >; + const bounty = ethers.utils.parseUnits('10', 18); + let GoldenBountyQuestion: NonNullable; beforeEach(async function () { // Create question const anskerBalanceBefore = await GoldenToken.balanceOf(asker.address); - await asker.GoldenToken.approve(GoldenProtocol.address, bounty); - const transactionQuestion = await asker.GoldenProtocol.createQuestion( + await asker.GoldenToken.approve(GoldenBounty.address, bounty); + const transactionQuestion = await asker.GoldenBounty.createQuestion( subjectUUID, predicateUUID, bounty @@ -75,13 +73,13 @@ describe('GoldenProtocol', function () { anskerBalanceBefore.sub(bounty) ); const createQuestionEvent = ( - await GoldenProtocol.queryFilter( - GoldenProtocol.filters.QuestionCreated() + await GoldenBounty.queryFilter( + GoldenBounty.filters.QuestionCreated() ) )[0]; - GoldenProtocolQuestion = - await ethers.getContractAt( - 'GoldenProtocolQuestion', + GoldenBountyQuestion = + await ethers.getContractAt( + 'GoldenBountyQuestion', createQuestionEvent.args.questionAddress ); expect( @@ -91,8 +89,8 @@ describe('GoldenProtocol', function () { it('emits event when question is created', async function () { const createQuestionEvent = ( - await GoldenProtocol.queryFilter( - GoldenProtocol.filters.QuestionCreated() + await GoldenBounty.queryFilter( + GoldenBounty.filters.QuestionCreated() ) )[0]; expect(createQuestionEvent.args.subjectUUID).to.equal(subjectUUID); @@ -100,29 +98,27 @@ describe('GoldenProtocol', function () { }); it('has correct and accessible state', async function () { - expect(await GoldenProtocolQuestion.owner()).to.equal( - GoldenProtocol.address - ); - expect(await GoldenProtocolQuestion.asker()).to.equal(asker.address); - expect(await GoldenProtocolQuestion.subjectUUID()).to.equal(subjectUUID); - expect(await GoldenProtocolQuestion.predicateUUID()).to.equal( + expect(await GoldenBountyQuestion.owner()).to.equal(GoldenBounty.address); + expect(await GoldenBountyQuestion.asker()).to.equal(asker.address); + expect(await GoldenBountyQuestion.subjectUUID()).to.equal(subjectUUID); + expect(await GoldenBountyQuestion.predicateUUID()).to.equal( predicateUUID ); - expect(await GoldenProtocolQuestion.bounty()).to.equal(bounty); + expect(await GoldenBountyQuestion.bounty()).to.equal(bounty); }); describe('Answer', function () { async function upvote() { - const transactionVote = await GoldenProtocolQuestion.connect( + const transactionVote = await GoldenBountyQuestion.connect( await ethers.getSigner(verifier.address) - ).upvote(0); + ).vote(0, true); const resultVote = await transactionVote.wait(); expect(resultVote.status).to.equal(1); } beforeEach(async function () { // Create answer - const transactionAnswer = await GoldenProtocolQuestion.connect( + const transactionAnswer = await GoldenBountyQuestion.connect( await ethers.getSigner(answerer.address) ).addAnswer(answer); const resultAnswer = await transactionAnswer.wait(); @@ -130,12 +126,12 @@ describe('GoldenProtocol', function () { }); it('emits event when answer is added', async function () { - expect(await GoldenProtocolQuestion.answers()).to.deep.equal([ - [answerer.address, answer, ethers.BigNumber.from(0)], + expect(await GoldenBountyQuestion['answers()']()).to.deep.equal([ + [answer, answerer.address, [], []], ]); const addAnswerEvent = ( - await GoldenProtocolQuestion.queryFilter( - GoldenProtocolQuestion.filters.AnswerAdded() + await GoldenBountyQuestion.queryFilter( + GoldenBountyQuestion.filters.AnswerAdded() ) )[0]; expect(addAnswerEvent.args.subjectUUID).to.equal(subjectUUID); @@ -146,51 +142,64 @@ describe('GoldenProtocol', function () { it('can be voted on', async function () { await upvote(); - const topAnswer = await GoldenProtocolQuestion.topAnswer(); + const topAnswer = await GoldenBountyQuestion.topAnswer(); expect(topAnswer.answerer).to.equal(answerer.address); expect(topAnswer.answer).to.equal(answer); - expect(topAnswer.voteCount).to.equal(ethers.BigNumber.from(1)); + expect(topAnswer.yesVoters).to.deep.equal([verifier.address]); + expect(topAnswer.noVoters).to.deep.equal([]); }); it('can not be voted on multiple times', async function () { await upvote(); expect( - GoldenProtocolQuestion.connect( + GoldenBountyQuestion.connect( await ethers.getSigner(verifier.address) - ).upvote(0) - ).to.be.revertedWith('GoldenProtocolQuestion: you have already voted'); + ).vote(0, true) + ).to.be.revertedWith('GoldenBountyQuestion: you have already voted'); }); it('can not be payed out without enough votes', async function () { await upvote(); expect( - GoldenProtocolQuestion.connect( + GoldenBountyQuestion.connect( await ethers.getSigner(asker.address) ).payout() ).to.be.revertedWith( - 'GoldenProtocolQuestion: payout: minimumVotes not met' + 'GoldenBountyQuestion: payout: minimumVotes not met' ); }); it('can be payed out', async function () { await upvote(); - expect(asker.GoldenProtocol.setMinimumVotes(1)).to.be.revertedWith( + expect(asker.GoldenBounty.setMinimumVotes(1)).to.be.revertedWith( 'Ownable: caller is not the owner' ); - await owner.GoldenProtocol.setMinimumVotes(1); + await owner.GoldenBounty.setMinimumVotes(1); const answererBalanceBefore = await GoldenToken.balanceOf( answerer.address ); - const transactionPayout = await GoldenProtocolQuestion.connect( + const verifierBalanceBefore = await GoldenToken.balanceOf( + verifier.address + ); + const contractBalanceBefore = await GoldenToken.balanceOf( + GoldenBounty.address + ); + const transactionPayout = await GoldenBountyQuestion.connect( await ethers.getSigner(asker.address) ).payout(); const resultPayout = await transactionPayout.wait(); expect(resultPayout.status).to.equal(1); expect( - await GoldenToken.balanceOf(GoldenProtocolQuestion.address) + await GoldenToken.balanceOf(GoldenBountyQuestion.address) ).to.equal(0); expect(await GoldenToken.balanceOf(answerer.address)).to.equal( - answererBalanceBefore.add(bounty) + answererBalanceBefore.add(bounty.div(10).mul(6)) + ); + expect(await GoldenToken.balanceOf(verifier.address)).to.equal( + verifierBalanceBefore.add(bounty.div(10).mul(3)) + ); + expect(await GoldenToken.balanceOf(GoldenBounty.address)).to.equal( + contractBalanceBefore.add(bounty.div(10)) ); }); }); diff --git a/test/utils/index.ts b/test/utils/index.ts index 3c88c220..aa62ae4d 100644 --- a/test/utils/index.ts +++ b/test/utils/index.ts @@ -6,16 +6,16 @@ import type { GoldenSchemaGovernor } from '../../typechain/contracts/GoldenSchem import type { GoldenSchema } from '../../typechain/contracts/GoldenSchema'; import type { GoldenToken } from '../../typechain/contracts/GoldenToken'; import type { - GoldenProtocol, - GoldenProtocolQuestion, -} from '../../typechain/contracts/GoldenProtocol.sol'; + GoldenBounty, + GoldenBountyQuestion, +} from '../../typechain/contracts/GoldenBounty.sol'; export type Contracts = { GoldenSchemaGovernor: GoldenSchemaGovernor; GoldenSchema: GoldenSchema; GoldenToken: GoldenToken; - GoldenProtocol: GoldenProtocol; - GoldenProtocolQuestion?: GoldenProtocolQuestion; + GoldenBounty: GoldenBounty; + GoldenBountyQuestion?: GoldenBountyQuestion; }; export type User = { address: Address } & T; diff --git a/typechain/contracts/GoldenBounty.sol/GoldenBounty.ts b/typechain/contracts/GoldenBounty.sol/GoldenBounty.ts new file mode 100644 index 00000000..104de6d6 --- /dev/null +++ b/typechain/contracts/GoldenBounty.sol/GoldenBounty.ts @@ -0,0 +1,304 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, +} from "../../common"; + +export interface GoldenBountyInterface extends utils.Interface { + functions: { + "createQuestion(bytes16,bytes16,uint256)": FunctionFragment; + "minimumVotes()": FunctionFragment; + "owner()": FunctionFragment; + "renounceOwnership()": FunctionFragment; + "setMinimumVotes(uint256)": FunctionFragment; + "transferOwnership(address)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "createQuestion" + | "minimumVotes" + | "owner" + | "renounceOwnership" + | "setMinimumVotes" + | "transferOwnership" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "createQuestion", + values: [BytesLike, BytesLike, BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "minimumVotes", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData( + functionFragment: "renounceOwnership", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "setMinimumVotes", + values: [BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "transferOwnership", + values: [string] + ): string; + + decodeFunctionResult( + functionFragment: "createQuestion", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "minimumVotes", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "renounceOwnership", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "setMinimumVotes", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "transferOwnership", + data: BytesLike + ): Result; + + events: { + "OwnershipTransferred(address,address)": EventFragment; + "QuestionCreated(address,bytes16,bytes16)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; + getEvent(nameOrSignatureOrTopic: "QuestionCreated"): EventFragment; +} + +export interface OwnershipTransferredEventObject { + previousOwner: string; + newOwner: string; +} +export type OwnershipTransferredEvent = TypedEvent< + [string, string], + OwnershipTransferredEventObject +>; + +export type OwnershipTransferredEventFilter = + TypedEventFilter; + +export interface QuestionCreatedEventObject { + questionAddress: string; + subjectUUID: string; + predicateUUID: string; +} +export type QuestionCreatedEvent = TypedEvent< + [string, string, string], + QuestionCreatedEventObject +>; + +export type QuestionCreatedEventFilter = TypedEventFilter; + +export interface GoldenBounty extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: GoldenBountyInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + createQuestion( + subjectUUID: BytesLike, + predicateUUID: BytesLike, + bounty: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + minimumVotes(overrides?: CallOverrides): Promise<[BigNumber]>; + + owner(overrides?: CallOverrides): Promise<[string]>; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + setMinimumVotes( + _minimumVotes: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + createQuestion( + subjectUUID: BytesLike, + predicateUUID: BytesLike, + bounty: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + minimumVotes(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + setMinimumVotes( + _minimumVotes: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + callStatic: { + createQuestion( + subjectUUID: BytesLike, + predicateUUID: BytesLike, + bounty: BigNumberish, + overrides?: CallOverrides + ): Promise; + + minimumVotes(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + renounceOwnership(overrides?: CallOverrides): Promise; + + setMinimumVotes( + _minimumVotes: BigNumberish, + overrides?: CallOverrides + ): Promise; + + transferOwnership( + newOwner: string, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "OwnershipTransferred(address,address)"( + previousOwner?: string | null, + newOwner?: string | null + ): OwnershipTransferredEventFilter; + OwnershipTransferred( + previousOwner?: string | null, + newOwner?: string | null + ): OwnershipTransferredEventFilter; + + "QuestionCreated(address,bytes16,bytes16)"( + questionAddress?: string | null, + subjectUUID?: null, + predicateUUID?: null + ): QuestionCreatedEventFilter; + QuestionCreated( + questionAddress?: string | null, + subjectUUID?: null, + predicateUUID?: null + ): QuestionCreatedEventFilter; + }; + + estimateGas: { + createQuestion( + subjectUUID: BytesLike, + predicateUUID: BytesLike, + bounty: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + minimumVotes(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + setMinimumVotes( + _minimumVotes: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + populateTransaction: { + createQuestion( + subjectUUID: BytesLike, + predicateUUID: BytesLike, + bounty: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + minimumVotes(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + setMinimumVotes( + _minimumVotes: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; +} diff --git a/typechain/contracts/GoldenBounty.sol/GoldenBountyQuestion.ts b/typechain/contracts/GoldenBounty.sol/GoldenBountyQuestion.ts new file mode 100644 index 00000000..6282aafc --- /dev/null +++ b/typechain/contracts/GoldenBounty.sol/GoldenBountyQuestion.ts @@ -0,0 +1,534 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, +} from "../../common"; + +export declare namespace GoldenBountyQuestion { + export type AnswerPublicStruct = { + answer: string; + answerer: string; + yesVoters: string[]; + noVoters: string[]; + }; + + export type AnswerPublicStructOutput = [ + string, + string, + string[], + string[] + ] & { + answer: string; + answerer: string; + yesVoters: string[]; + noVoters: string[]; + }; +} + +export interface GoldenBountyQuestionInterface extends utils.Interface { + functions: { + "acceptedAnswers()": FunctionFragment; + "addAnswer(string)": FunctionFragment; + "answers(uint8)": FunctionFragment; + "answers()": FunctionFragment; + "asker()": FunctionFragment; + "bounty()": FunctionFragment; + "owner()": FunctionFragment; + "payout()": FunctionFragment; + "pendingAnswers()": FunctionFragment; + "predicateUUID()": FunctionFragment; + "rejectedAnswers()": FunctionFragment; + "renounceOwnership()": FunctionFragment; + "subjectUUID()": FunctionFragment; + "topAnswer()": FunctionFragment; + "transferOwnership(address)": FunctionFragment; + "vote(uint256,bool)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "acceptedAnswers" + | "addAnswer" + | "answers(uint8)" + | "answers()" + | "asker" + | "bounty" + | "owner" + | "payout" + | "pendingAnswers" + | "predicateUUID" + | "rejectedAnswers" + | "renounceOwnership" + | "subjectUUID" + | "topAnswer" + | "transferOwnership" + | "vote" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "acceptedAnswers", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "addAnswer", values: [string]): string; + encodeFunctionData( + functionFragment: "answers(uint8)", + values: [BigNumberish] + ): string; + encodeFunctionData(functionFragment: "answers()", values?: undefined): string; + encodeFunctionData(functionFragment: "asker", values?: undefined): string; + encodeFunctionData(functionFragment: "bounty", values?: undefined): string; + encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData(functionFragment: "payout", values?: undefined): string; + encodeFunctionData( + functionFragment: "pendingAnswers", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "predicateUUID", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "rejectedAnswers", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "renounceOwnership", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "subjectUUID", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "topAnswer", values?: undefined): string; + encodeFunctionData( + functionFragment: "transferOwnership", + values: [string] + ): string; + encodeFunctionData( + functionFragment: "vote", + values: [BigNumberish, boolean] + ): string; + + decodeFunctionResult( + functionFragment: "acceptedAnswers", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "addAnswer", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "answers(uint8)", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "answers()", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "asker", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "bounty", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "payout", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "pendingAnswers", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "predicateUUID", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "rejectedAnswers", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "renounceOwnership", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "subjectUUID", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "topAnswer", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "transferOwnership", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "vote", data: BytesLike): Result; + + events: { + "AnswerAdded(bytes16,bytes16,string,uint256)": EventFragment; + "OwnershipTransferred(address,address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "AnswerAdded"): EventFragment; + getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; +} + +export interface AnswerAddedEventObject { + subjectUUID: string; + predicateUUID: string; + answer: string; + index: BigNumber; +} +export type AnswerAddedEvent = TypedEvent< + [string, string, string, BigNumber], + AnswerAddedEventObject +>; + +export type AnswerAddedEventFilter = TypedEventFilter; + +export interface OwnershipTransferredEventObject { + previousOwner: string; + newOwner: string; +} +export type OwnershipTransferredEvent = TypedEvent< + [string, string], + OwnershipTransferredEventObject +>; + +export type OwnershipTransferredEventFilter = + TypedEventFilter; + +export interface GoldenBountyQuestion extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: GoldenBountyQuestionInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + acceptedAnswers( + overrides?: CallOverrides + ): Promise<[GoldenBountyQuestion.AnswerPublicStructOutput[]]>; + + addAnswer( + _answer: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + "answers(uint8)"( + status: BigNumberish, + overrides?: CallOverrides + ): Promise<[GoldenBountyQuestion.AnswerPublicStructOutput[]]>; + + "answers()"( + overrides?: CallOverrides + ): Promise<[GoldenBountyQuestion.AnswerPublicStructOutput[]]>; + + asker(overrides?: CallOverrides): Promise<[string]>; + + bounty(overrides?: CallOverrides): Promise<[BigNumber]>; + + owner(overrides?: CallOverrides): Promise<[string]>; + + payout( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + pendingAnswers( + overrides?: CallOverrides + ): Promise<[GoldenBountyQuestion.AnswerPublicStructOutput[]]>; + + predicateUUID(overrides?: CallOverrides): Promise<[string]>; + + rejectedAnswers( + overrides?: CallOverrides + ): Promise<[GoldenBountyQuestion.AnswerPublicStructOutput[]]>; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + subjectUUID(overrides?: CallOverrides): Promise<[string]>; + + topAnswer( + overrides?: CallOverrides + ): Promise<[GoldenBountyQuestion.AnswerPublicStructOutput]>; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + vote( + index: BigNumberish, + isCorrect: boolean, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + acceptedAnswers( + overrides?: CallOverrides + ): Promise; + + addAnswer( + _answer: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + "answers(uint8)"( + status: BigNumberish, + overrides?: CallOverrides + ): Promise; + + "answers()"( + overrides?: CallOverrides + ): Promise; + + asker(overrides?: CallOverrides): Promise; + + bounty(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + payout( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + pendingAnswers( + overrides?: CallOverrides + ): Promise; + + predicateUUID(overrides?: CallOverrides): Promise; + + rejectedAnswers( + overrides?: CallOverrides + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + subjectUUID(overrides?: CallOverrides): Promise; + + topAnswer( + overrides?: CallOverrides + ): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + vote( + index: BigNumberish, + isCorrect: boolean, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + callStatic: { + acceptedAnswers( + overrides?: CallOverrides + ): Promise; + + addAnswer(_answer: string, overrides?: CallOverrides): Promise; + + "answers(uint8)"( + status: BigNumberish, + overrides?: CallOverrides + ): Promise; + + "answers()"( + overrides?: CallOverrides + ): Promise; + + asker(overrides?: CallOverrides): Promise; + + bounty(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + payout(overrides?: CallOverrides): Promise; + + pendingAnswers( + overrides?: CallOverrides + ): Promise; + + predicateUUID(overrides?: CallOverrides): Promise; + + rejectedAnswers( + overrides?: CallOverrides + ): Promise; + + renounceOwnership(overrides?: CallOverrides): Promise; + + subjectUUID(overrides?: CallOverrides): Promise; + + topAnswer( + overrides?: CallOverrides + ): Promise; + + transferOwnership( + newOwner: string, + overrides?: CallOverrides + ): Promise; + + vote( + index: BigNumberish, + isCorrect: boolean, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "AnswerAdded(bytes16,bytes16,string,uint256)"( + subjectUUID?: null, + predicateUUID?: null, + answer?: null, + index?: null + ): AnswerAddedEventFilter; + AnswerAdded( + subjectUUID?: null, + predicateUUID?: null, + answer?: null, + index?: null + ): AnswerAddedEventFilter; + + "OwnershipTransferred(address,address)"( + previousOwner?: string | null, + newOwner?: string | null + ): OwnershipTransferredEventFilter; + OwnershipTransferred( + previousOwner?: string | null, + newOwner?: string | null + ): OwnershipTransferredEventFilter; + }; + + estimateGas: { + acceptedAnswers(overrides?: CallOverrides): Promise; + + addAnswer( + _answer: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + "answers(uint8)"( + status: BigNumberish, + overrides?: CallOverrides + ): Promise; + + "answers()"(overrides?: CallOverrides): Promise; + + asker(overrides?: CallOverrides): Promise; + + bounty(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + payout( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + pendingAnswers(overrides?: CallOverrides): Promise; + + predicateUUID(overrides?: CallOverrides): Promise; + + rejectedAnswers(overrides?: CallOverrides): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + subjectUUID(overrides?: CallOverrides): Promise; + + topAnswer(overrides?: CallOverrides): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + vote( + index: BigNumberish, + isCorrect: boolean, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + populateTransaction: { + acceptedAnswers(overrides?: CallOverrides): Promise; + + addAnswer( + _answer: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + "answers(uint8)"( + status: BigNumberish, + overrides?: CallOverrides + ): Promise; + + "answers()"(overrides?: CallOverrides): Promise; + + asker(overrides?: CallOverrides): Promise; + + bounty(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + payout( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + pendingAnswers(overrides?: CallOverrides): Promise; + + predicateUUID(overrides?: CallOverrides): Promise; + + rejectedAnswers(overrides?: CallOverrides): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + subjectUUID(overrides?: CallOverrides): Promise; + + topAnswer(overrides?: CallOverrides): Promise; + + transferOwnership( + newOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + vote( + index: BigNumberish, + isCorrect: boolean, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; +} diff --git a/typechain/contracts/GoldenBounty.sol/index.ts b/typechain/contracts/GoldenBounty.sol/index.ts new file mode 100644 index 00000000..501f9304 --- /dev/null +++ b/typechain/contracts/GoldenBounty.sol/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { GoldenBounty } from "./GoldenBounty"; +export type { GoldenBountyQuestion } from "./GoldenBountyQuestion"; diff --git a/typechain/contracts/index.ts b/typechain/contracts/index.ts index b98f7957..c3feb857 100644 --- a/typechain/contracts/index.ts +++ b/typechain/contracts/index.ts @@ -1,8 +1,8 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import type * as goldenProtocolSol from "./GoldenProtocol.sol"; -export type { goldenProtocolSol }; +import type * as goldenBountySol from "./GoldenBounty.sol"; +export type { goldenBountySol }; import type * as nft from "./nft"; export type { nft }; export type { GoldenSchema } from "./GoldenSchema"; diff --git a/typechain/factories/contracts/GoldenBounty.sol/GoldenBountyQuestion__factory.ts b/typechain/factories/contracts/GoldenBounty.sol/GoldenBountyQuestion__factory.ts new file mode 100644 index 00000000..95a935c2 --- /dev/null +++ b/typechain/factories/contracts/GoldenBounty.sol/GoldenBountyQuestion__factory.ts @@ -0,0 +1,508 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { + Signer, + utils, + Contract, + ContractFactory, + BytesLike, + Overrides, +} from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { + GoldenBountyQuestion, + GoldenBountyQuestionInterface, +} from "../../../contracts/GoldenBounty.sol/GoldenBountyQuestion"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "goldenTokenAddress", + type: "address", + }, + { + internalType: "address", + name: "_asker", + type: "address", + }, + { + internalType: "bytes16", + name: "_subjectUUID", + type: "bytes16", + }, + { + internalType: "bytes16", + name: "_predicateUUID", + type: "bytes16", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "bytes16", + name: "subjectUUID", + type: "bytes16", + }, + { + indexed: false, + internalType: "bytes16", + name: "predicateUUID", + type: "bytes16", + }, + { + indexed: false, + internalType: "string", + name: "answer", + type: "string", + }, + { + indexed: false, + internalType: "uint256", + name: "index", + type: "uint256", + }, + ], + name: "AnswerAdded", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + inputs: [], + name: "acceptedAnswers", + outputs: [ + { + components: [ + { + internalType: "string", + name: "answer", + type: "string", + }, + { + internalType: "address", + name: "answerer", + type: "address", + }, + { + internalType: "address[]", + name: "yesVoters", + type: "address[]", + }, + { + internalType: "address[]", + name: "noVoters", + type: "address[]", + }, + ], + internalType: "struct GoldenBountyQuestion.AnswerPublic[]", + name: "", + type: "tuple[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "string", + name: "_answer", + type: "string", + }, + ], + name: "addAnswer", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "enum GoldenBountyQuestion.AnswerStatus", + name: "status", + type: "uint8", + }, + ], + name: "answers", + outputs: [ + { + components: [ + { + internalType: "string", + name: "answer", + type: "string", + }, + { + internalType: "address", + name: "answerer", + type: "address", + }, + { + internalType: "address[]", + name: "yesVoters", + type: "address[]", + }, + { + internalType: "address[]", + name: "noVoters", + type: "address[]", + }, + ], + internalType: "struct GoldenBountyQuestion.AnswerPublic[]", + name: "", + type: "tuple[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "answers", + outputs: [ + { + components: [ + { + internalType: "string", + name: "answer", + type: "string", + }, + { + internalType: "address", + name: "answerer", + type: "address", + }, + { + internalType: "address[]", + name: "yesVoters", + type: "address[]", + }, + { + internalType: "address[]", + name: "noVoters", + type: "address[]", + }, + ], + internalType: "struct GoldenBountyQuestion.AnswerPublic[]", + name: "", + type: "tuple[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "asker", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "bounty", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "payout", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "pendingAnswers", + outputs: [ + { + components: [ + { + internalType: "string", + name: "answer", + type: "string", + }, + { + internalType: "address", + name: "answerer", + type: "address", + }, + { + internalType: "address[]", + name: "yesVoters", + type: "address[]", + }, + { + internalType: "address[]", + name: "noVoters", + type: "address[]", + }, + ], + internalType: "struct GoldenBountyQuestion.AnswerPublic[]", + name: "", + type: "tuple[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "predicateUUID", + outputs: [ + { + internalType: "bytes16", + name: "", + type: "bytes16", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "rejectedAnswers", + outputs: [ + { + components: [ + { + internalType: "string", + name: "answer", + type: "string", + }, + { + internalType: "address", + name: "answerer", + type: "address", + }, + { + internalType: "address[]", + name: "yesVoters", + type: "address[]", + }, + { + internalType: "address[]", + name: "noVoters", + type: "address[]", + }, + ], + internalType: "struct GoldenBountyQuestion.AnswerPublic[]", + name: "", + type: "tuple[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "subjectUUID", + outputs: [ + { + internalType: "bytes16", + name: "", + type: "bytes16", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "topAnswer", + outputs: [ + { + components: [ + { + internalType: "string", + name: "answer", + type: "string", + }, + { + internalType: "address", + name: "answerer", + type: "address", + }, + { + internalType: "address[]", + name: "yesVoters", + type: "address[]", + }, + { + internalType: "address[]", + name: "noVoters", + type: "address[]", + }, + ], + internalType: "struct GoldenBountyQuestion.AnswerPublic", + name: "", + type: "tuple", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "index", + type: "uint256", + }, + { + internalType: "bool", + name: "isCorrect", + type: "bool", + }, + ], + name: "vote", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +]; + +const _bytecode = + "0x60806040523480156200001157600080fd5b5060405162001e4e38038062001e4e833981016040819052620000349162000180565b6200003f33620000fa565b6001600160a01b038316620000b25760405162461bcd60e51b815260206004820152602f60248201527f476f6c64656e426f756e74795175657374696f6e3a2061736b6572206973207460448201526e6865207a65726f206164647265737360881b606482015260840160405180910390fd5b600180546001600160a01b039586166001600160a01b0319918216179091556002805494909516931692909217909255608090811c600160801b0291901c17600355620001dd565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200016257600080fd5b919050565b80516001600160801b0319811681146200016257600080fd5b600080600080608085870312156200019757600080fd5b620001a2856200014a565b9350620001b2602086016200014a565b9250620001c26040860162000167565b9150620001d26060860162000167565b905092959194509250565b611c6180620001ed6000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063943dfef111610097578063c9d27afe11610066578063c9d27afe146101f5578063da7e18c714610208578063e1145e4b1461021b578063f2fde38b1461022357600080fd5b8063943dfef1146101b05780639c314545146101c6578063bbe0ba85146101ce578063c7a66eb3146101e257600080fd5b80637a2faee0116100d35780637a2faee01461013d57806388775d8f1461016357806388fae0e9146101765780638da5cb5b1461018b57600080fd5b80634627216d1461010557806363bd1d4a146101235780636573f31e1461012d578063715018a614610135575b600080fd5b61010d610236565b60405161011a91906117ad565b60405180910390f35b61012b610247565b005b61010d610533565b61012b61053f565b60035461014a9060801b81565b6040516001600160801b0319909116815260200161011a565b61012b61017136600461180f565b610553565b61017e610652565b60405161011a9190611881565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161011a565b6101b86107de565b60405190815260200161011a565b61010d61084b565b60035461014a90600160801b900460801b81565b600254610198906001600160a01b031681565b61012b6102033660046118a2565b610857565b61010d6102163660046118d2565b6109b4565b61010d610c38565b61012b6102313660046118f3565b610e75565b606061024260026109b4565b905090565b6002546001600160a01b0316336001600160a01b0316146102af5760405162461bcd60e51b815260206004820152601f60248201527f476f6c64656e426f756e74795175657374696f6e3a206f6e6c7941736b65720060448201526064015b60405180910390fd5b60006102b961084b565b90506000815167ffffffffffffffff8111156102d7576102d761191c565b604051908082528060200260200182016040528015610300578160200160208202803683370190505b5090506000805b835181101561039e5783818151811061032257610322611932565b60200260200101516020015183828151811061034057610340611932565b60200260200101906001600160a01b031690816001600160a01b03168152505083818151811061037257610372611932565b602002602001015160400151518261038a919061195e565b91508061039681611971565b915050610307565b5060008167ffffffffffffffff8111156103ba576103ba61191c565b6040519080825280602002602001820160405280156103e3578160200160208202803683370190505b5090506000805b85518110156104b05760005b86828151811061040857610408611932565b6020026020010151604001515181101561049d5786828151811061042e5761042e611932565b602002602001015160400151818151811061044b5761044b611932565b602002602001015184848151811061046557610465611932565b6001600160a01b03909216602092830291909101909101528261048781611971565b935050808061049590611971565b9150506103f6565b50806104a881611971565b9150506103ea565b5060006104bb6107de565b90506104dc6104cb600a8361198a565b6104d69060066119ac565b86610eee565b6104fb6104ea600a8361198a565b6104f59060036119ac565b84610eee565b61052b6105106000546001600160a01b031690565b6105186107de565b6001546001600160a01b03169190610f85565b505050505050565b606061024260006109b4565b610547610fdc565b6105516000611036565b565b806105ae5760405162461bcd60e51b815260206004820152602560248201527f476f6c64656e426f756e74795175657374696f6e3a20616e7377657220697320604482015264656d70747960d81b60648201526084016102a6565b336000818152600460205260409020806105c9848683611a45565b506001810180546001600160a01b0319166001600160a01b0384161790556105f2600583611086565b6003547ffd045500a034a5e731f843b696fcd566854cd7ccb879d6b3adb708152bbe43e690608081811b91600160801b9004901b86866106336005886110a2565b604051610644959493929190611b06565b60405180910390a150505050565b61065a611685565b60006106646110c2565b90506040518060800160405280826000018054610680906119cb565b80601f01602080910402602001604051908101604052809291908181526020018280546106ac906119cb565b80156106f95780601f106106ce576101008083540402835291602001916106f9565b820191906000526020600020905b8154815290600101906020018083116106dc57829003601f168201915b505050918352505060018301546001600160a01b0316602080830191909152600384018054604080518285028101850182528281529401939283018282801561076b57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161074d575b50505050508152602001826004016001018054806020026020016040519081016040528092919081815260200182805480156107d057602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116107b2575b505050505081525091505090565b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102429190611b5a565b606061024260016109b4565b60065482106108c75760405162461bcd60e51b815260206004820152603660248201527f476f6c64656e426f756e74795175657374696f6e3a207468657265206973206e6044820152750de40c2dce6eecae440c2e840e8d0c2e840d2dcc8caf60531b60648201526084016102a6565b60006004816108d760058661118c565b6001600160a01b03166001600160a01b03168152602001908152602001600020905060006109023390565b905061091160028301826111bf565b158015610928575061092660048301826111bf565b155b6109895760405162461bcd60e51b815260206004820152602c60248201527f476f6c64656e426f756e74795175657374696f6e3a20796f752068617665206160448201526b1b1c9958591e481d9bdd195960a21b60648201526084016102a6565b82156109a15761099c6002830182611222565b6109ae565b6109ae6004830182611222565b50505050565b60065460609060009067ffffffffffffffff8111156109d5576109d561191c565b604051908082528060200260200182016040528015610a0e57816020015b6109fb611685565b8152602001906001900390816109f35790505b5090506000805b600654811015610c2f576000610a2c60058361118c565b6001600160a01b0381166000908152600460205260408120919250610a508261136a565b9050876002811115610a6457610a64611b73565b816002811115610a7657610a76611b73565b03610c19576040518060800160405280836000018054610a95906119cb565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac1906119cb565b8015610b0e5780601f10610ae357610100808354040283529160200191610b0e565b820191906000526020600020905b815481529060010190602001808311610af157829003601f168201915b505050918352505060018401546001600160a01b03166020808301919091526003850180546040805182850281018501825282815294019392830182828015610b8057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b62575b5050505050815260200183600401600101805480602002602001604051908101604052809291908181526020018280548015610be557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610bc7575b5050505050815250868681518110610bff57610bff611932565b60200260200101819052508480610c1590611971565b9550505b5050508080610c2790611971565b915050610a15565b50909392505050565b60065460609060009067ffffffffffffffff811115610c5957610c5961191c565b604051908082528060200260200182016040528015610c9257816020015b610c7f611685565b815260200190600190039081610c775790505b50905060005b600654811015610e6f576000610caf60058361118c565b6001600160a01b0381166000908152600460205260409081902081516080810190925280549293509181908390610ce5906119cb565b80601f0160208091040260200160405190810160405280929190818152602001828054610d11906119cb565b8015610d5e5780601f10610d3357610100808354040283529160200191610d5e565b820191906000526020600020905b815481529060010190602001808311610d4157829003601f168201915b505050918352505060018301546001600160a01b03166020808301919091526003840180546040805182850281018501825282815294019392830182828015610dd057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610db2575b5050505050815260200182600401600101805480602002602001604051908101604052809291908181526020018280548015610e3557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e17575b5050505050815250848481518110610e4f57610e4f611932565b602002602001018190525050508080610e6790611971565b915050610c98565b50919050565b610e7d610fdc565b6001600160a01b038116610ee25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102a6565b610eeb81611036565b50565b600080825184610efe919061198a565b905060005b8351811015610f5d57610f3f848281518110610f2157610f21611932565b60209081029190910101516001546001600160a01b03169084610f85565b610f49828461195e565b925080610f5581611971565b915050610f03565b50838210156109ae576109ae610f7b6000546001600160a01b031690565b6105188487611b89565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610fd7908490611430565b505050565b6000546001600160a01b031633146105515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102a6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61109082826111bf565b61109e5761109e8282611222565b5050565b6001600160a01b0381166000908152602083905260409020545b92915050565b60008080805b6006548110156111555760006004816110e260058561118c565b6001600160a01b03166001600160a01b031681526020019081526020016000209050600061110f8261136a565b9050600181600281111561112557611125611b73565b036111405760038201548581111561113e578095508394505b505b5050808061114d90611971565b9150506110c8565b506004600061116560058461118c565b6001600160a01b03166001600160a01b031681526020019081526020016000209250505090565b60008260010182815481106111a3576111a3611932565b6000918252602090912001546001600160a01b03169392505050565b600182015460009081036111d5575060006110bc565b6001600160a01b038216600081815260208590526040902054600185018054909190811061120557611205611932565b6000918252602090912001546001600160a01b0316149392505050565b6001600160a01b0381166112895760405162461bcd60e51b815260206004820152602860248201527f556e6f7264657265644b65795365742831303029202d204b65792063616e6e6f604482015267074206265203078360c41b60648201526084016102a6565b61129382826111bf565b156113125760405162461bcd60e51b815260206004820152604360248201527f556e6f726465726564416464726573735365742831303129202d20416464726560448201527f737320286b65792920616c72656164792065786973747320696e20746865207360648201526232ba1760e91b608482015260a4016102a6565b6001828101805480830182556000828152602090200180546001600160a01b0319166001600160a01b0385161790555461134c9190611b89565b6001600160a01b039091166000908152602092909252604090912055565b6005810154600090819060038401546113839190611b9c565b905060006113996000546001600160a01b031690565b6001600160a01b0316636407e0d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fa9190611b5a565b905080821261140d575060019392505050565b61141681611bc3565b8213611426575060029392505050565b5060009392505050565b6000611485826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166115029092919063ffffffff16565b805190915015610fd757808060200190518101906114a39190611bdf565b610fd75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016102a6565b6060611511848460008561151b565b90505b9392505050565b60608247101561157c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016102a6565b6001600160a01b0385163b6115d35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016102a6565b600080866001600160a01b031685876040516115ef9190611bfc565b60006040518083038185875af1925050503d806000811461162c576040519150601f19603f3d011682016040523d82523d6000602084013e611631565b606091505b509150915061164182828661164c565b979650505050505050565b6060831561165b575081611514565b82511561166b5782518084602001fd5b8160405162461bcd60e51b81526004016102a69190611c18565b60405180608001604052806060815260200160006001600160a01b0316815260200160608152602001606081525090565b60005b838110156116d15781810151838201526020016116b9565b50506000910152565b600081518084526116f28160208601602086016116b6565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b8381101561173f5781516001600160a01b03168752958201959082019060010161171a565b509495945050505050565b600081516080845261175f60808501826116da565b905060018060a01b0360208401511660208501526040830151848203604086015261178a8282611706565b915050606083015184820360608601526117a48282611706565b95945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561180257603f198886030184526117f085835161174a565b945092850192908501906001016117d4565b5092979650505050505050565b6000806020838503121561182257600080fd5b823567ffffffffffffffff8082111561183a57600080fd5b818501915085601f83011261184e57600080fd5b81358181111561185d57600080fd5b86602082850101111561186f57600080fd5b60209290920196919550909350505050565b602081526000611514602083018461174a565b8015158114610eeb57600080fd5b600080604083850312156118b557600080fd5b8235915060208301356118c781611894565b809150509250929050565b6000602082840312156118e457600080fd5b81356003811061151457600080fd5b60006020828403121561190557600080fd5b81356001600160a01b038116811461151457600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156110bc576110bc611948565b60006001820161198357611983611948565b5060010190565b6000826119a757634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156119c6576119c6611948565b500290565b600181811c908216806119df57607f821691505b602082108103610e6f57634e487b7160e01b600052602260045260246000fd5b601f821115610fd757600081815260208120601f850160051c81016020861015611a265750805b601f850160051c820191505b8181101561052b57828155600101611a32565b67ffffffffffffffff831115611a5d57611a5d61191c565b611a7183611a6b83546119cb565b836119ff565b6000601f841160018114611aa55760008515611a8d5750838201355b600019600387901b1c1916600186901b178355611aff565b600083815260209020601f19861690835b82811015611ad65786850135825560209485019460019092019101611ab6565b5086821015611af35760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b6001600160801b031986811682528516602082015260806040820181905281018390526000838560a0840137600060a0858401015260a0601f19601f86011683010190508260608301529695505050505050565b600060208284031215611b6c57600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fd5b818103818111156110bc576110bc611948565b8181036000831280158383131683831282161715611bbc57611bbc611948565b5092915050565b6000600160ff1b8201611bd857611bd8611948565b5060000390565b600060208284031215611bf157600080fd5b815161151481611894565b60008251611c0e8184602087016116b6565b9190910192915050565b60208152600061151460208301846116da56fea26469706673582212204e97ea5b4c8e8934daf7b6b65f2954e0085493f12da141c29606380f5b353bf264736f6c63430008100033"; + +type GoldenBountyQuestionConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: GoldenBountyQuestionConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class GoldenBountyQuestion__factory extends ContractFactory { + constructor(...args: GoldenBountyQuestionConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + goldenTokenAddress: string, + _asker: string, + _subjectUUID: BytesLike, + _predicateUUID: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): Promise { + return super.deploy( + goldenTokenAddress, + _asker, + _subjectUUID, + _predicateUUID, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + goldenTokenAddress: string, + _asker: string, + _subjectUUID: BytesLike, + _predicateUUID: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): TransactionRequest { + return super.getDeployTransaction( + goldenTokenAddress, + _asker, + _subjectUUID, + _predicateUUID, + overrides || {} + ); + } + override attach(address: string): GoldenBountyQuestion { + return super.attach(address) as GoldenBountyQuestion; + } + override connect(signer: Signer): GoldenBountyQuestion__factory { + return super.connect(signer) as GoldenBountyQuestion__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): GoldenBountyQuestionInterface { + return new utils.Interface(_abi) as GoldenBountyQuestionInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): GoldenBountyQuestion { + return new Contract( + address, + _abi, + signerOrProvider + ) as GoldenBountyQuestion; + } +} diff --git a/typechain/factories/contracts/GoldenBounty.sol/GoldenBounty__factory.ts b/typechain/factories/contracts/GoldenBounty.sol/GoldenBounty__factory.ts new file mode 100644 index 00000000..8594221b --- /dev/null +++ b/typechain/factories/contracts/GoldenBounty.sol/GoldenBounty__factory.ts @@ -0,0 +1,229 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { + Signer, + utils, + Contract, + ContractFactory, + BigNumberish, + Overrides, +} from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { + GoldenBounty, + GoldenBountyInterface, +} from "../../../contracts/GoldenBounty.sol/GoldenBounty"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "goldenTokenAddress", + type: "address", + }, + { + internalType: "uint256", + name: "_minimumVotes", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "questionAddress", + type: "address", + }, + { + indexed: false, + internalType: "bytes16", + name: "subjectUUID", + type: "bytes16", + }, + { + indexed: false, + internalType: "bytes16", + name: "predicateUUID", + type: "bytes16", + }, + ], + name: "QuestionCreated", + type: "event", + }, + { + inputs: [ + { + internalType: "bytes16", + name: "subjectUUID", + type: "bytes16", + }, + { + internalType: "bytes16", + name: "predicateUUID", + type: "bytes16", + }, + { + internalType: "uint256", + name: "bounty", + type: "uint256", + }, + ], + name: "createQuestion", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "minimumVotes", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "_minimumVotes", + type: "uint256", + }, + ], + name: "setMinimumVotes", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +]; + +const _bytecode = + "0x608060405234801561001057600080fd5b506040516129c33803806129c383398101604081905261002f916100b1565b61003833610061565b600180546001600160a01b0319166001600160a01b0393909316929092179091556002556100eb565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080604083850312156100c457600080fd5b82516001600160a01b03811681146100db57600080fd5b6020939093015192949293505050565b6128c9806100fa6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80636407e0d414610067578063715018a6146100835780638da5cb5b1461008d5780639902b633146100b2578063d6fbfb24146100c5578063f2fde38b146100d8575b600080fd5b61007060025481565b6040519081526020015b60405180910390f35b61008b6100eb565b005b6000546001600160a01b03165b6040516001600160a01b03909116815260200161007a565b61008b6100c03660046107ac565b6100ff565b61009a6100d33660046107e2565b61010c565b61008b6100e636600461081e565b6103c3565b6100f361043c565b6100fd6000610496565b565b61010761043c565b600255565b6001546040805163313ce56760e01b815290516000926001600160a01b03169163313ce5679160048083019260209291908290030181865afa158015610156573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061017a9190610847565b61018590600a610966565b61018f9083610975565b156102075760405162461bcd60e51b815260206004820152603860248201527f476f6c64656e426f756e74793a20426f756e7479206d7573742062652061206d60448201527f756c7469706c65206f66203120476f6c64656e546f6b656e000000000000000060648201526084015b60405180910390fd5b60015482906001600160a01b031663dd62ed3e336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381865afa158015610265573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102899190610997565b10156102e35760405162461bcd60e51b8152602060048201526024808201527f476f6c64656e426f756e74793a20696e73756666696369656e7420616c6c6f77604482015263616e636560e01b60648201526084016101fe565b6001546000906001600160a01b03163386866040516103019061079e565b6001600160a01b0394851681529390921660208401526001600160801b03199081166040840152166060820152608001604051809103906000f08015801561034d573d6000803e3d6000fd5b50905080610369336001546001600160a01b03169083876104e6565b604080516001600160801b03198089168252871660208201526001600160a01b038316917f3076d13066db8356cf7cd41e2693da7420b7e1fbe6068dcf215ea724df87b3a2910160405180910390a29150505b9392505050565b6103cb61043c565b6001600160a01b0381166104305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101fe565b61043981610496565b50565b6000546001600160a01b031633146100fd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101fe565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610540908590610546565b50505050565b600061059b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661061d9092919063ffffffff16565b80519091501561061857808060200190518101906105b991906109b0565b6106185760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016101fe565b505050565b606061062c8484600085610634565b949350505050565b6060824710156106955760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016101fe565b6001600160a01b0385163b6106ec5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101fe565b600080866001600160a01b0316858760405161070891906109f6565b60006040518083038185875af1925050503d8060008114610745576040519150601f19603f3d011682016040523d82523d6000602084013e61074a565b606091505b509150915061075a828286610765565b979650505050505050565b606083156107745750816103bc565b8251156107845782518084602001fd5b8160405162461bcd60e51b81526004016101fe9190610a12565b611e4e8062000a4683390190565b6000602082840312156107be57600080fd5b5035919050565b80356001600160801b0319811681146107dd57600080fd5b919050565b6000806000606084860312156107f757600080fd5b610800846107c5565b925061080e602085016107c5565b9150604084013590509250925092565b60006020828403121561083057600080fd5b81356001600160a01b03811681146103bc57600080fd5b60006020828403121561085957600080fd5b815160ff811681146103bc57600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b808511156108bb5781600019048211156108a1576108a161086a565b808516156108ae57918102915b93841c9390800290610885565b509250929050565b6000826108d257506001610960565b816108df57506000610960565b81600181146108f557600281146108ff5761091b565b6001915050610960565b60ff8411156109105761091061086a565b50506001821b610960565b5060208310610133831016604e8410600b841016171561093e575081810a610960565b6109488383610880565b806000190482111561095c5761095c61086a565b0290505b92915050565b60006103bc60ff8416836108c3565b60008261099257634e487b7160e01b600052601260045260246000fd5b500690565b6000602082840312156109a957600080fd5b5051919050565b6000602082840312156109c257600080fd5b815180151581146103bc57600080fd5b60005b838110156109ed5781810151838201526020016109d5565b50506000910152565b60008251610a088184602087016109d2565b9190910192915050565b6020815260008251806020840152610a318160408501602087016109d2565b601f01601f1916919091016040019291505056fe60806040523480156200001157600080fd5b5060405162001e4e38038062001e4e833981016040819052620000349162000180565b6200003f33620000fa565b6001600160a01b038316620000b25760405162461bcd60e51b815260206004820152602f60248201527f476f6c64656e426f756e74795175657374696f6e3a2061736b6572206973207460448201526e6865207a65726f206164647265737360881b606482015260840160405180910390fd5b600180546001600160a01b039586166001600160a01b0319918216179091556002805494909516931692909217909255608090811c600160801b0291901c17600355620001dd565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200016257600080fd5b919050565b80516001600160801b0319811681146200016257600080fd5b600080600080608085870312156200019757600080fd5b620001a2856200014a565b9350620001b2602086016200014a565b9250620001c26040860162000167565b9150620001d26060860162000167565b905092959194509250565b611c6180620001ed6000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063943dfef111610097578063c9d27afe11610066578063c9d27afe146101f5578063da7e18c714610208578063e1145e4b1461021b578063f2fde38b1461022357600080fd5b8063943dfef1146101b05780639c314545146101c6578063bbe0ba85146101ce578063c7a66eb3146101e257600080fd5b80637a2faee0116100d35780637a2faee01461013d57806388775d8f1461016357806388fae0e9146101765780638da5cb5b1461018b57600080fd5b80634627216d1461010557806363bd1d4a146101235780636573f31e1461012d578063715018a614610135575b600080fd5b61010d610236565b60405161011a91906117ad565b60405180910390f35b61012b610247565b005b61010d610533565b61012b61053f565b60035461014a9060801b81565b6040516001600160801b0319909116815260200161011a565b61012b61017136600461180f565b610553565b61017e610652565b60405161011a9190611881565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161011a565b6101b86107de565b60405190815260200161011a565b61010d61084b565b60035461014a90600160801b900460801b81565b600254610198906001600160a01b031681565b61012b6102033660046118a2565b610857565b61010d6102163660046118d2565b6109b4565b61010d610c38565b61012b6102313660046118f3565b610e75565b606061024260026109b4565b905090565b6002546001600160a01b0316336001600160a01b0316146102af5760405162461bcd60e51b815260206004820152601f60248201527f476f6c64656e426f756e74795175657374696f6e3a206f6e6c7941736b65720060448201526064015b60405180910390fd5b60006102b961084b565b90506000815167ffffffffffffffff8111156102d7576102d761191c565b604051908082528060200260200182016040528015610300578160200160208202803683370190505b5090506000805b835181101561039e5783818151811061032257610322611932565b60200260200101516020015183828151811061034057610340611932565b60200260200101906001600160a01b031690816001600160a01b03168152505083818151811061037257610372611932565b602002602001015160400151518261038a919061195e565b91508061039681611971565b915050610307565b5060008167ffffffffffffffff8111156103ba576103ba61191c565b6040519080825280602002602001820160405280156103e3578160200160208202803683370190505b5090506000805b85518110156104b05760005b86828151811061040857610408611932565b6020026020010151604001515181101561049d5786828151811061042e5761042e611932565b602002602001015160400151818151811061044b5761044b611932565b602002602001015184848151811061046557610465611932565b6001600160a01b03909216602092830291909101909101528261048781611971565b935050808061049590611971565b9150506103f6565b50806104a881611971565b9150506103ea565b5060006104bb6107de565b90506104dc6104cb600a8361198a565b6104d69060066119ac565b86610eee565b6104fb6104ea600a8361198a565b6104f59060036119ac565b84610eee565b61052b6105106000546001600160a01b031690565b6105186107de565b6001546001600160a01b03169190610f85565b505050505050565b606061024260006109b4565b610547610fdc565b6105516000611036565b565b806105ae5760405162461bcd60e51b815260206004820152602560248201527f476f6c64656e426f756e74795175657374696f6e3a20616e7377657220697320604482015264656d70747960d81b60648201526084016102a6565b336000818152600460205260409020806105c9848683611a45565b506001810180546001600160a01b0319166001600160a01b0384161790556105f2600583611086565b6003547ffd045500a034a5e731f843b696fcd566854cd7ccb879d6b3adb708152bbe43e690608081811b91600160801b9004901b86866106336005886110a2565b604051610644959493929190611b06565b60405180910390a150505050565b61065a611685565b60006106646110c2565b90506040518060800160405280826000018054610680906119cb565b80601f01602080910402602001604051908101604052809291908181526020018280546106ac906119cb565b80156106f95780601f106106ce576101008083540402835291602001916106f9565b820191906000526020600020905b8154815290600101906020018083116106dc57829003601f168201915b505050918352505060018301546001600160a01b0316602080830191909152600384018054604080518285028101850182528281529401939283018282801561076b57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161074d575b50505050508152602001826004016001018054806020026020016040519081016040528092919081815260200182805480156107d057602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116107b2575b505050505081525091505090565b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102429190611b5a565b606061024260016109b4565b60065482106108c75760405162461bcd60e51b815260206004820152603660248201527f476f6c64656e426f756e74795175657374696f6e3a207468657265206973206e6044820152750de40c2dce6eecae440c2e840e8d0c2e840d2dcc8caf60531b60648201526084016102a6565b60006004816108d760058661118c565b6001600160a01b03166001600160a01b03168152602001908152602001600020905060006109023390565b905061091160028301826111bf565b158015610928575061092660048301826111bf565b155b6109895760405162461bcd60e51b815260206004820152602c60248201527f476f6c64656e426f756e74795175657374696f6e3a20796f752068617665206160448201526b1b1c9958591e481d9bdd195960a21b60648201526084016102a6565b82156109a15761099c6002830182611222565b6109ae565b6109ae6004830182611222565b50505050565b60065460609060009067ffffffffffffffff8111156109d5576109d561191c565b604051908082528060200260200182016040528015610a0e57816020015b6109fb611685565b8152602001906001900390816109f35790505b5090506000805b600654811015610c2f576000610a2c60058361118c565b6001600160a01b0381166000908152600460205260408120919250610a508261136a565b9050876002811115610a6457610a64611b73565b816002811115610a7657610a76611b73565b03610c19576040518060800160405280836000018054610a95906119cb565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac1906119cb565b8015610b0e5780601f10610ae357610100808354040283529160200191610b0e565b820191906000526020600020905b815481529060010190602001808311610af157829003601f168201915b505050918352505060018401546001600160a01b03166020808301919091526003850180546040805182850281018501825282815294019392830182828015610b8057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b62575b5050505050815260200183600401600101805480602002602001604051908101604052809291908181526020018280548015610be557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610bc7575b5050505050815250868681518110610bff57610bff611932565b60200260200101819052508480610c1590611971565b9550505b5050508080610c2790611971565b915050610a15565b50909392505050565b60065460609060009067ffffffffffffffff811115610c5957610c5961191c565b604051908082528060200260200182016040528015610c9257816020015b610c7f611685565b815260200190600190039081610c775790505b50905060005b600654811015610e6f576000610caf60058361118c565b6001600160a01b0381166000908152600460205260409081902081516080810190925280549293509181908390610ce5906119cb565b80601f0160208091040260200160405190810160405280929190818152602001828054610d11906119cb565b8015610d5e5780601f10610d3357610100808354040283529160200191610d5e565b820191906000526020600020905b815481529060010190602001808311610d4157829003601f168201915b505050918352505060018301546001600160a01b03166020808301919091526003840180546040805182850281018501825282815294019392830182828015610dd057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610db2575b5050505050815260200182600401600101805480602002602001604051908101604052809291908181526020018280548015610e3557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e17575b5050505050815250848481518110610e4f57610e4f611932565b602002602001018190525050508080610e6790611971565b915050610c98565b50919050565b610e7d610fdc565b6001600160a01b038116610ee25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102a6565b610eeb81611036565b50565b600080825184610efe919061198a565b905060005b8351811015610f5d57610f3f848281518110610f2157610f21611932565b60209081029190910101516001546001600160a01b03169084610f85565b610f49828461195e565b925080610f5581611971565b915050610f03565b50838210156109ae576109ae610f7b6000546001600160a01b031690565b6105188487611b89565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610fd7908490611430565b505050565b6000546001600160a01b031633146105515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102a6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61109082826111bf565b61109e5761109e8282611222565b5050565b6001600160a01b0381166000908152602083905260409020545b92915050565b60008080805b6006548110156111555760006004816110e260058561118c565b6001600160a01b03166001600160a01b031681526020019081526020016000209050600061110f8261136a565b9050600181600281111561112557611125611b73565b036111405760038201548581111561113e578095508394505b505b5050808061114d90611971565b9150506110c8565b506004600061116560058461118c565b6001600160a01b03166001600160a01b031681526020019081526020016000209250505090565b60008260010182815481106111a3576111a3611932565b6000918252602090912001546001600160a01b03169392505050565b600182015460009081036111d5575060006110bc565b6001600160a01b038216600081815260208590526040902054600185018054909190811061120557611205611932565b6000918252602090912001546001600160a01b0316149392505050565b6001600160a01b0381166112895760405162461bcd60e51b815260206004820152602860248201527f556e6f7264657265644b65795365742831303029202d204b65792063616e6e6f604482015267074206265203078360c41b60648201526084016102a6565b61129382826111bf565b156113125760405162461bcd60e51b815260206004820152604360248201527f556e6f726465726564416464726573735365742831303129202d20416464726560448201527f737320286b65792920616c72656164792065786973747320696e20746865207360648201526232ba1760e91b608482015260a4016102a6565b6001828101805480830182556000828152602090200180546001600160a01b0319166001600160a01b0385161790555461134c9190611b89565b6001600160a01b039091166000908152602092909252604090912055565b6005810154600090819060038401546113839190611b9c565b905060006113996000546001600160a01b031690565b6001600160a01b0316636407e0d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fa9190611b5a565b905080821261140d575060019392505050565b61141681611bc3565b8213611426575060029392505050565b5060009392505050565b6000611485826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166115029092919063ffffffff16565b805190915015610fd757808060200190518101906114a39190611bdf565b610fd75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016102a6565b6060611511848460008561151b565b90505b9392505050565b60608247101561157c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016102a6565b6001600160a01b0385163b6115d35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016102a6565b600080866001600160a01b031685876040516115ef9190611bfc565b60006040518083038185875af1925050503d806000811461162c576040519150601f19603f3d011682016040523d82523d6000602084013e611631565b606091505b509150915061164182828661164c565b979650505050505050565b6060831561165b575081611514565b82511561166b5782518084602001fd5b8160405162461bcd60e51b81526004016102a69190611c18565b60405180608001604052806060815260200160006001600160a01b0316815260200160608152602001606081525090565b60005b838110156116d15781810151838201526020016116b9565b50506000910152565b600081518084526116f28160208601602086016116b6565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b8381101561173f5781516001600160a01b03168752958201959082019060010161171a565b509495945050505050565b600081516080845261175f60808501826116da565b905060018060a01b0360208401511660208501526040830151848203604086015261178a8282611706565b915050606083015184820360608601526117a48282611706565b95945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561180257603f198886030184526117f085835161174a565b945092850192908501906001016117d4565b5092979650505050505050565b6000806020838503121561182257600080fd5b823567ffffffffffffffff8082111561183a57600080fd5b818501915085601f83011261184e57600080fd5b81358181111561185d57600080fd5b86602082850101111561186f57600080fd5b60209290920196919550909350505050565b602081526000611514602083018461174a565b8015158114610eeb57600080fd5b600080604083850312156118b557600080fd5b8235915060208301356118c781611894565b809150509250929050565b6000602082840312156118e457600080fd5b81356003811061151457600080fd5b60006020828403121561190557600080fd5b81356001600160a01b038116811461151457600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156110bc576110bc611948565b60006001820161198357611983611948565b5060010190565b6000826119a757634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156119c6576119c6611948565b500290565b600181811c908216806119df57607f821691505b602082108103610e6f57634e487b7160e01b600052602260045260246000fd5b601f821115610fd757600081815260208120601f850160051c81016020861015611a265750805b601f850160051c820191505b8181101561052b57828155600101611a32565b67ffffffffffffffff831115611a5d57611a5d61191c565b611a7183611a6b83546119cb565b836119ff565b6000601f841160018114611aa55760008515611a8d5750838201355b600019600387901b1c1916600186901b178355611aff565b600083815260209020601f19861690835b82811015611ad65786850135825560209485019460019092019101611ab6565b5086821015611af35760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b6001600160801b031986811682528516602082015260806040820181905281018390526000838560a0840137600060a0858401015260a0601f19601f86011683010190508260608301529695505050505050565b600060208284031215611b6c57600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fd5b818103818111156110bc576110bc611948565b8181036000831280158383131683831282161715611bbc57611bbc611948565b5092915050565b6000600160ff1b8201611bd857611bd8611948565b5060000390565b600060208284031215611bf157600080fd5b815161151481611894565b60008251611c0e8184602087016116b6565b9190910192915050565b60208152600061151460208301846116da56fea26469706673582212204e97ea5b4c8e8934daf7b6b65f2954e0085493f12da141c29606380f5b353bf264736f6c63430008100033a264697066735822122034b66f47eadeaed38e8d4bb371bb885929bd0f18b17d5d7e466d62dbf11dd76f64736f6c63430008100033"; + +type GoldenBountyConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: GoldenBountyConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class GoldenBounty__factory extends ContractFactory { + constructor(...args: GoldenBountyConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + goldenTokenAddress: string, + _minimumVotes: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise { + return super.deploy( + goldenTokenAddress, + _minimumVotes, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + goldenTokenAddress: string, + _minimumVotes: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): TransactionRequest { + return super.getDeployTransaction( + goldenTokenAddress, + _minimumVotes, + overrides || {} + ); + } + override attach(address: string): GoldenBounty { + return super.attach(address) as GoldenBounty; + } + override connect(signer: Signer): GoldenBounty__factory { + return super.connect(signer) as GoldenBounty__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): GoldenBountyInterface { + return new utils.Interface(_abi) as GoldenBountyInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): GoldenBounty { + return new Contract(address, _abi, signerOrProvider) as GoldenBounty; + } +} diff --git a/typechain/factories/contracts/GoldenBounty.sol/index.ts b/typechain/factories/contracts/GoldenBounty.sol/index.ts new file mode 100644 index 00000000..b2f7b8d3 --- /dev/null +++ b/typechain/factories/contracts/GoldenBounty.sol/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { GoldenBounty__factory } from "./GoldenBounty__factory"; +export { GoldenBountyQuestion__factory } from "./GoldenBountyQuestion__factory"; diff --git a/typechain/factories/contracts/index.ts b/typechain/factories/contracts/index.ts index be54c60d..abd1eb55 100644 --- a/typechain/factories/contracts/index.ts +++ b/typechain/factories/contracts/index.ts @@ -1,7 +1,7 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -export * as goldenProtocolSol from "./GoldenProtocol.sol"; +export * as goldenBountySol from "./GoldenBounty.sol"; export * as nft from "./nft"; export { GoldenSchema__factory } from "./GoldenSchema__factory"; export { GoldenSchemaGovernor__factory } from "./GoldenSchemaGovernor__factory"; diff --git a/typechain/index.ts b/typechain/index.ts index f85d6da8..8899c406 100644 --- a/typechain/index.ts +++ b/typechain/index.ts @@ -72,10 +72,10 @@ export type { IERC165 } from "./@openzeppelin/contracts/utils/introspection/IERC export { IERC165__factory } from "./factories/@openzeppelin/contracts/utils/introspection/IERC165__factory"; export type { DoubleEndedQueue } from "./@openzeppelin/contracts/utils/structs/DoubleEndedQueue"; export { DoubleEndedQueue__factory } from "./factories/@openzeppelin/contracts/utils/structs/DoubleEndedQueue__factory"; -export type { GoldenProtocol } from "./contracts/GoldenProtocol.sol/GoldenProtocol"; -export { GoldenProtocol__factory } from "./factories/contracts/GoldenProtocol.sol/GoldenProtocol__factory"; -export type { GoldenProtocolQuestion } from "./contracts/GoldenProtocol.sol/GoldenProtocolQuestion"; -export { GoldenProtocolQuestion__factory } from "./factories/contracts/GoldenProtocol.sol/GoldenProtocolQuestion__factory"; +export type { GoldenBounty } from "./contracts/GoldenBounty.sol/GoldenBounty"; +export { GoldenBounty__factory } from "./factories/contracts/GoldenBounty.sol/GoldenBounty__factory"; +export type { GoldenBountyQuestion } from "./contracts/GoldenBounty.sol/GoldenBountyQuestion"; +export { GoldenBountyQuestion__factory } from "./factories/contracts/GoldenBounty.sol/GoldenBountyQuestion__factory"; export type { GoldenSchema } from "./contracts/GoldenSchema"; export { GoldenSchema__factory } from "./factories/contracts/GoldenSchema__factory"; export type { GoldenSchemaGovernor } from "./contracts/GoldenSchemaGovernor"; From 321e2d90b3da9f1468a763063f50a40b76122bef Mon Sep 17 00:00:00 2001 From: Dave Hrdlicka Date: Tue, 25 Oct 2022 15:19:22 +0200 Subject: [PATCH 7/8] Fix merge --- .../contracts/GoldenBounty.sol/GoldenBountyQuestion__factory.ts | 2 +- .../contracts/GoldenBounty.sol/GoldenBounty__factory.ts | 2 +- typechain/factories/contracts/GoldenToken__factory.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/typechain/factories/contracts/GoldenBounty.sol/GoldenBountyQuestion__factory.ts b/typechain/factories/contracts/GoldenBounty.sol/GoldenBountyQuestion__factory.ts index 95a935c2..8360b4c5 100644 --- a/typechain/factories/contracts/GoldenBounty.sol/GoldenBountyQuestion__factory.ts +++ b/typechain/factories/contracts/GoldenBounty.sol/GoldenBountyQuestion__factory.ts @@ -434,7 +434,7 @@ const _abi = [ ]; const _bytecode = - "0x60806040523480156200001157600080fd5b5060405162001e4e38038062001e4e833981016040819052620000349162000180565b6200003f33620000fa565b6001600160a01b038316620000b25760405162461bcd60e51b815260206004820152602f60248201527f476f6c64656e426f756e74795175657374696f6e3a2061736b6572206973207460448201526e6865207a65726f206164647265737360881b606482015260840160405180910390fd5b600180546001600160a01b039586166001600160a01b0319918216179091556002805494909516931692909217909255608090811c600160801b0291901c17600355620001dd565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200016257600080fd5b919050565b80516001600160801b0319811681146200016257600080fd5b600080600080608085870312156200019757600080fd5b620001a2856200014a565b9350620001b2602086016200014a565b9250620001c26040860162000167565b9150620001d26060860162000167565b905092959194509250565b611c6180620001ed6000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063943dfef111610097578063c9d27afe11610066578063c9d27afe146101f5578063da7e18c714610208578063e1145e4b1461021b578063f2fde38b1461022357600080fd5b8063943dfef1146101b05780639c314545146101c6578063bbe0ba85146101ce578063c7a66eb3146101e257600080fd5b80637a2faee0116100d35780637a2faee01461013d57806388775d8f1461016357806388fae0e9146101765780638da5cb5b1461018b57600080fd5b80634627216d1461010557806363bd1d4a146101235780636573f31e1461012d578063715018a614610135575b600080fd5b61010d610236565b60405161011a91906117ad565b60405180910390f35b61012b610247565b005b61010d610533565b61012b61053f565b60035461014a9060801b81565b6040516001600160801b0319909116815260200161011a565b61012b61017136600461180f565b610553565b61017e610652565b60405161011a9190611881565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161011a565b6101b86107de565b60405190815260200161011a565b61010d61084b565b60035461014a90600160801b900460801b81565b600254610198906001600160a01b031681565b61012b6102033660046118a2565b610857565b61010d6102163660046118d2565b6109b4565b61010d610c38565b61012b6102313660046118f3565b610e75565b606061024260026109b4565b905090565b6002546001600160a01b0316336001600160a01b0316146102af5760405162461bcd60e51b815260206004820152601f60248201527f476f6c64656e426f756e74795175657374696f6e3a206f6e6c7941736b65720060448201526064015b60405180910390fd5b60006102b961084b565b90506000815167ffffffffffffffff8111156102d7576102d761191c565b604051908082528060200260200182016040528015610300578160200160208202803683370190505b5090506000805b835181101561039e5783818151811061032257610322611932565b60200260200101516020015183828151811061034057610340611932565b60200260200101906001600160a01b031690816001600160a01b03168152505083818151811061037257610372611932565b602002602001015160400151518261038a919061195e565b91508061039681611971565b915050610307565b5060008167ffffffffffffffff8111156103ba576103ba61191c565b6040519080825280602002602001820160405280156103e3578160200160208202803683370190505b5090506000805b85518110156104b05760005b86828151811061040857610408611932565b6020026020010151604001515181101561049d5786828151811061042e5761042e611932565b602002602001015160400151818151811061044b5761044b611932565b602002602001015184848151811061046557610465611932565b6001600160a01b03909216602092830291909101909101528261048781611971565b935050808061049590611971565b9150506103f6565b50806104a881611971565b9150506103ea565b5060006104bb6107de565b90506104dc6104cb600a8361198a565b6104d69060066119ac565b86610eee565b6104fb6104ea600a8361198a565b6104f59060036119ac565b84610eee565b61052b6105106000546001600160a01b031690565b6105186107de565b6001546001600160a01b03169190610f85565b505050505050565b606061024260006109b4565b610547610fdc565b6105516000611036565b565b806105ae5760405162461bcd60e51b815260206004820152602560248201527f476f6c64656e426f756e74795175657374696f6e3a20616e7377657220697320604482015264656d70747960d81b60648201526084016102a6565b336000818152600460205260409020806105c9848683611a45565b506001810180546001600160a01b0319166001600160a01b0384161790556105f2600583611086565b6003547ffd045500a034a5e731f843b696fcd566854cd7ccb879d6b3adb708152bbe43e690608081811b91600160801b9004901b86866106336005886110a2565b604051610644959493929190611b06565b60405180910390a150505050565b61065a611685565b60006106646110c2565b90506040518060800160405280826000018054610680906119cb565b80601f01602080910402602001604051908101604052809291908181526020018280546106ac906119cb565b80156106f95780601f106106ce576101008083540402835291602001916106f9565b820191906000526020600020905b8154815290600101906020018083116106dc57829003601f168201915b505050918352505060018301546001600160a01b0316602080830191909152600384018054604080518285028101850182528281529401939283018282801561076b57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161074d575b50505050508152602001826004016001018054806020026020016040519081016040528092919081815260200182805480156107d057602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116107b2575b505050505081525091505090565b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102429190611b5a565b606061024260016109b4565b60065482106108c75760405162461bcd60e51b815260206004820152603660248201527f476f6c64656e426f756e74795175657374696f6e3a207468657265206973206e6044820152750de40c2dce6eecae440c2e840e8d0c2e840d2dcc8caf60531b60648201526084016102a6565b60006004816108d760058661118c565b6001600160a01b03166001600160a01b03168152602001908152602001600020905060006109023390565b905061091160028301826111bf565b158015610928575061092660048301826111bf565b155b6109895760405162461bcd60e51b815260206004820152602c60248201527f476f6c64656e426f756e74795175657374696f6e3a20796f752068617665206160448201526b1b1c9958591e481d9bdd195960a21b60648201526084016102a6565b82156109a15761099c6002830182611222565b6109ae565b6109ae6004830182611222565b50505050565b60065460609060009067ffffffffffffffff8111156109d5576109d561191c565b604051908082528060200260200182016040528015610a0e57816020015b6109fb611685565b8152602001906001900390816109f35790505b5090506000805b600654811015610c2f576000610a2c60058361118c565b6001600160a01b0381166000908152600460205260408120919250610a508261136a565b9050876002811115610a6457610a64611b73565b816002811115610a7657610a76611b73565b03610c19576040518060800160405280836000018054610a95906119cb565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac1906119cb565b8015610b0e5780601f10610ae357610100808354040283529160200191610b0e565b820191906000526020600020905b815481529060010190602001808311610af157829003601f168201915b505050918352505060018401546001600160a01b03166020808301919091526003850180546040805182850281018501825282815294019392830182828015610b8057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b62575b5050505050815260200183600401600101805480602002602001604051908101604052809291908181526020018280548015610be557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610bc7575b5050505050815250868681518110610bff57610bff611932565b60200260200101819052508480610c1590611971565b9550505b5050508080610c2790611971565b915050610a15565b50909392505050565b60065460609060009067ffffffffffffffff811115610c5957610c5961191c565b604051908082528060200260200182016040528015610c9257816020015b610c7f611685565b815260200190600190039081610c775790505b50905060005b600654811015610e6f576000610caf60058361118c565b6001600160a01b0381166000908152600460205260409081902081516080810190925280549293509181908390610ce5906119cb565b80601f0160208091040260200160405190810160405280929190818152602001828054610d11906119cb565b8015610d5e5780601f10610d3357610100808354040283529160200191610d5e565b820191906000526020600020905b815481529060010190602001808311610d4157829003601f168201915b505050918352505060018301546001600160a01b03166020808301919091526003840180546040805182850281018501825282815294019392830182828015610dd057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610db2575b5050505050815260200182600401600101805480602002602001604051908101604052809291908181526020018280548015610e3557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e17575b5050505050815250848481518110610e4f57610e4f611932565b602002602001018190525050508080610e6790611971565b915050610c98565b50919050565b610e7d610fdc565b6001600160a01b038116610ee25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102a6565b610eeb81611036565b50565b600080825184610efe919061198a565b905060005b8351811015610f5d57610f3f848281518110610f2157610f21611932565b60209081029190910101516001546001600160a01b03169084610f85565b610f49828461195e565b925080610f5581611971565b915050610f03565b50838210156109ae576109ae610f7b6000546001600160a01b031690565b6105188487611b89565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610fd7908490611430565b505050565b6000546001600160a01b031633146105515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102a6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61109082826111bf565b61109e5761109e8282611222565b5050565b6001600160a01b0381166000908152602083905260409020545b92915050565b60008080805b6006548110156111555760006004816110e260058561118c565b6001600160a01b03166001600160a01b031681526020019081526020016000209050600061110f8261136a565b9050600181600281111561112557611125611b73565b036111405760038201548581111561113e578095508394505b505b5050808061114d90611971565b9150506110c8565b506004600061116560058461118c565b6001600160a01b03166001600160a01b031681526020019081526020016000209250505090565b60008260010182815481106111a3576111a3611932565b6000918252602090912001546001600160a01b03169392505050565b600182015460009081036111d5575060006110bc565b6001600160a01b038216600081815260208590526040902054600185018054909190811061120557611205611932565b6000918252602090912001546001600160a01b0316149392505050565b6001600160a01b0381166112895760405162461bcd60e51b815260206004820152602860248201527f556e6f7264657265644b65795365742831303029202d204b65792063616e6e6f604482015267074206265203078360c41b60648201526084016102a6565b61129382826111bf565b156113125760405162461bcd60e51b815260206004820152604360248201527f556e6f726465726564416464726573735365742831303129202d20416464726560448201527f737320286b65792920616c72656164792065786973747320696e20746865207360648201526232ba1760e91b608482015260a4016102a6565b6001828101805480830182556000828152602090200180546001600160a01b0319166001600160a01b0385161790555461134c9190611b89565b6001600160a01b039091166000908152602092909252604090912055565b6005810154600090819060038401546113839190611b9c565b905060006113996000546001600160a01b031690565b6001600160a01b0316636407e0d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fa9190611b5a565b905080821261140d575060019392505050565b61141681611bc3565b8213611426575060029392505050565b5060009392505050565b6000611485826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166115029092919063ffffffff16565b805190915015610fd757808060200190518101906114a39190611bdf565b610fd75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016102a6565b6060611511848460008561151b565b90505b9392505050565b60608247101561157c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016102a6565b6001600160a01b0385163b6115d35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016102a6565b600080866001600160a01b031685876040516115ef9190611bfc565b60006040518083038185875af1925050503d806000811461162c576040519150601f19603f3d011682016040523d82523d6000602084013e611631565b606091505b509150915061164182828661164c565b979650505050505050565b6060831561165b575081611514565b82511561166b5782518084602001fd5b8160405162461bcd60e51b81526004016102a69190611c18565b60405180608001604052806060815260200160006001600160a01b0316815260200160608152602001606081525090565b60005b838110156116d15781810151838201526020016116b9565b50506000910152565b600081518084526116f28160208601602086016116b6565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b8381101561173f5781516001600160a01b03168752958201959082019060010161171a565b509495945050505050565b600081516080845261175f60808501826116da565b905060018060a01b0360208401511660208501526040830151848203604086015261178a8282611706565b915050606083015184820360608601526117a48282611706565b95945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561180257603f198886030184526117f085835161174a565b945092850192908501906001016117d4565b5092979650505050505050565b6000806020838503121561182257600080fd5b823567ffffffffffffffff8082111561183a57600080fd5b818501915085601f83011261184e57600080fd5b81358181111561185d57600080fd5b86602082850101111561186f57600080fd5b60209290920196919550909350505050565b602081526000611514602083018461174a565b8015158114610eeb57600080fd5b600080604083850312156118b557600080fd5b8235915060208301356118c781611894565b809150509250929050565b6000602082840312156118e457600080fd5b81356003811061151457600080fd5b60006020828403121561190557600080fd5b81356001600160a01b038116811461151457600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156110bc576110bc611948565b60006001820161198357611983611948565b5060010190565b6000826119a757634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156119c6576119c6611948565b500290565b600181811c908216806119df57607f821691505b602082108103610e6f57634e487b7160e01b600052602260045260246000fd5b601f821115610fd757600081815260208120601f850160051c81016020861015611a265750805b601f850160051c820191505b8181101561052b57828155600101611a32565b67ffffffffffffffff831115611a5d57611a5d61191c565b611a7183611a6b83546119cb565b836119ff565b6000601f841160018114611aa55760008515611a8d5750838201355b600019600387901b1c1916600186901b178355611aff565b600083815260209020601f19861690835b82811015611ad65786850135825560209485019460019092019101611ab6565b5086821015611af35760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b6001600160801b031986811682528516602082015260806040820181905281018390526000838560a0840137600060a0858401015260a0601f19601f86011683010190508260608301529695505050505050565b600060208284031215611b6c57600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fd5b818103818111156110bc576110bc611948565b8181036000831280158383131683831282161715611bbc57611bbc611948565b5092915050565b6000600160ff1b8201611bd857611bd8611948565b5060000390565b600060208284031215611bf157600080fd5b815161151481611894565b60008251611c0e8184602087016116b6565b9190910192915050565b60208152600061151460208301846116da56fea26469706673582212204e97ea5b4c8e8934daf7b6b65f2954e0085493f12da141c29606380f5b353bf264736f6c63430008100033"; + "0x60806040523480156200001157600080fd5b5060405162001e4e38038062001e4e833981016040819052620000349162000180565b6200003f33620000fa565b6001600160a01b038316620000b25760405162461bcd60e51b815260206004820152602f60248201527f476f6c64656e426f756e74795175657374696f6e3a2061736b6572206973207460448201526e6865207a65726f206164647265737360881b606482015260840160405180910390fd5b600180546001600160a01b039586166001600160a01b0319918216179091556002805494909516931692909217909255608090811c600160801b0291901c17600355620001dd565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200016257600080fd5b919050565b80516001600160801b0319811681146200016257600080fd5b600080600080608085870312156200019757600080fd5b620001a2856200014a565b9350620001b2602086016200014a565b9250620001c26040860162000167565b9150620001d26060860162000167565b905092959194509250565b611c6180620001ed6000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063943dfef111610097578063c9d27afe11610066578063c9d27afe146101f5578063da7e18c714610208578063e1145e4b1461021b578063f2fde38b1461022357600080fd5b8063943dfef1146101b05780639c314545146101c6578063bbe0ba85146101ce578063c7a66eb3146101e257600080fd5b80637a2faee0116100d35780637a2faee01461013d57806388775d8f1461016357806388fae0e9146101765780638da5cb5b1461018b57600080fd5b80634627216d1461010557806363bd1d4a146101235780636573f31e1461012d578063715018a614610135575b600080fd5b61010d610236565b60405161011a91906117ad565b60405180910390f35b61012b610247565b005b61010d610533565b61012b61053f565b60035461014a9060801b81565b6040516001600160801b0319909116815260200161011a565b61012b61017136600461180f565b610553565b61017e610652565b60405161011a9190611881565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161011a565b6101b86107de565b60405190815260200161011a565b61010d61084b565b60035461014a90600160801b900460801b81565b600254610198906001600160a01b031681565b61012b6102033660046118a2565b610857565b61010d6102163660046118d2565b6109b4565b61010d610c38565b61012b6102313660046118f3565b610e75565b606061024260026109b4565b905090565b6002546001600160a01b0316336001600160a01b0316146102af5760405162461bcd60e51b815260206004820152601f60248201527f476f6c64656e426f756e74795175657374696f6e3a206f6e6c7941736b65720060448201526064015b60405180910390fd5b60006102b961084b565b90506000815167ffffffffffffffff8111156102d7576102d761191c565b604051908082528060200260200182016040528015610300578160200160208202803683370190505b5090506000805b835181101561039e5783818151811061032257610322611932565b60200260200101516020015183828151811061034057610340611932565b60200260200101906001600160a01b031690816001600160a01b03168152505083818151811061037257610372611932565b602002602001015160400151518261038a919061195e565b91508061039681611971565b915050610307565b5060008167ffffffffffffffff8111156103ba576103ba61191c565b6040519080825280602002602001820160405280156103e3578160200160208202803683370190505b5090506000805b85518110156104b05760005b86828151811061040857610408611932565b6020026020010151604001515181101561049d5786828151811061042e5761042e611932565b602002602001015160400151818151811061044b5761044b611932565b602002602001015184848151811061046557610465611932565b6001600160a01b03909216602092830291909101909101528261048781611971565b935050808061049590611971565b9150506103f6565b50806104a881611971565b9150506103ea565b5060006104bb6107de565b90506104dc6104cb600a8361198a565b6104d69060066119ac565b86610eee565b6104fb6104ea600a8361198a565b6104f59060036119ac565b84610eee565b61052b6105106000546001600160a01b031690565b6105186107de565b6001546001600160a01b03169190610f85565b505050505050565b606061024260006109b4565b610547610fdc565b6105516000611036565b565b806105ae5760405162461bcd60e51b815260206004820152602560248201527f476f6c64656e426f756e74795175657374696f6e3a20616e7377657220697320604482015264656d70747960d81b60648201526084016102a6565b336000818152600460205260409020806105c9848683611a45565b506001810180546001600160a01b0319166001600160a01b0384161790556105f2600583611086565b6003547ffd045500a034a5e731f843b696fcd566854cd7ccb879d6b3adb708152bbe43e690608081811b91600160801b9004901b86866106336005886110a2565b604051610644959493929190611b06565b60405180910390a150505050565b61065a611685565b60006106646110c2565b90506040518060800160405280826000018054610680906119cb565b80601f01602080910402602001604051908101604052809291908181526020018280546106ac906119cb565b80156106f95780601f106106ce576101008083540402835291602001916106f9565b820191906000526020600020905b8154815290600101906020018083116106dc57829003601f168201915b505050918352505060018301546001600160a01b0316602080830191909152600384018054604080518285028101850182528281529401939283018282801561076b57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161074d575b50505050508152602001826004016001018054806020026020016040519081016040528092919081815260200182805480156107d057602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116107b2575b505050505081525091505090565b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102429190611b5a565b606061024260016109b4565b60065482106108c75760405162461bcd60e51b815260206004820152603660248201527f476f6c64656e426f756e74795175657374696f6e3a207468657265206973206e6044820152750de40c2dce6eecae440c2e840e8d0c2e840d2dcc8caf60531b60648201526084016102a6565b60006004816108d760058661118c565b6001600160a01b03166001600160a01b03168152602001908152602001600020905060006109023390565b905061091160028301826111bf565b158015610928575061092660048301826111bf565b155b6109895760405162461bcd60e51b815260206004820152602c60248201527f476f6c64656e426f756e74795175657374696f6e3a20796f752068617665206160448201526b1b1c9958591e481d9bdd195960a21b60648201526084016102a6565b82156109a15761099c6002830182611222565b6109ae565b6109ae6004830182611222565b50505050565b60065460609060009067ffffffffffffffff8111156109d5576109d561191c565b604051908082528060200260200182016040528015610a0e57816020015b6109fb611685565b8152602001906001900390816109f35790505b5090506000805b600654811015610c2f576000610a2c60058361118c565b6001600160a01b0381166000908152600460205260408120919250610a508261136a565b9050876002811115610a6457610a64611b73565b816002811115610a7657610a76611b73565b03610c19576040518060800160405280836000018054610a95906119cb565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac1906119cb565b8015610b0e5780601f10610ae357610100808354040283529160200191610b0e565b820191906000526020600020905b815481529060010190602001808311610af157829003601f168201915b505050918352505060018401546001600160a01b03166020808301919091526003850180546040805182850281018501825282815294019392830182828015610b8057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b62575b5050505050815260200183600401600101805480602002602001604051908101604052809291908181526020018280548015610be557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610bc7575b5050505050815250868681518110610bff57610bff611932565b60200260200101819052508480610c1590611971565b9550505b5050508080610c2790611971565b915050610a15565b50909392505050565b60065460609060009067ffffffffffffffff811115610c5957610c5961191c565b604051908082528060200260200182016040528015610c9257816020015b610c7f611685565b815260200190600190039081610c775790505b50905060005b600654811015610e6f576000610caf60058361118c565b6001600160a01b0381166000908152600460205260409081902081516080810190925280549293509181908390610ce5906119cb565b80601f0160208091040260200160405190810160405280929190818152602001828054610d11906119cb565b8015610d5e5780601f10610d3357610100808354040283529160200191610d5e565b820191906000526020600020905b815481529060010190602001808311610d4157829003601f168201915b505050918352505060018301546001600160a01b03166020808301919091526003840180546040805182850281018501825282815294019392830182828015610dd057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610db2575b5050505050815260200182600401600101805480602002602001604051908101604052809291908181526020018280548015610e3557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e17575b5050505050815250848481518110610e4f57610e4f611932565b602002602001018190525050508080610e6790611971565b915050610c98565b50919050565b610e7d610fdc565b6001600160a01b038116610ee25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102a6565b610eeb81611036565b50565b600080825184610efe919061198a565b905060005b8351811015610f5d57610f3f848281518110610f2157610f21611932565b60209081029190910101516001546001600160a01b03169084610f85565b610f49828461195e565b925080610f5581611971565b915050610f03565b50838210156109ae576109ae610f7b6000546001600160a01b031690565b6105188487611b89565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610fd7908490611430565b505050565b6000546001600160a01b031633146105515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102a6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61109082826111bf565b61109e5761109e8282611222565b5050565b6001600160a01b0381166000908152602083905260409020545b92915050565b60008080805b6006548110156111555760006004816110e260058561118c565b6001600160a01b03166001600160a01b031681526020019081526020016000209050600061110f8261136a565b9050600181600281111561112557611125611b73565b036111405760038201548581111561113e578095508394505b505b5050808061114d90611971565b9150506110c8565b506004600061116560058461118c565b6001600160a01b03166001600160a01b031681526020019081526020016000209250505090565b60008260010182815481106111a3576111a3611932565b6000918252602090912001546001600160a01b03169392505050565b600182015460009081036111d5575060006110bc565b6001600160a01b038216600081815260208590526040902054600185018054909190811061120557611205611932565b6000918252602090912001546001600160a01b0316149392505050565b6001600160a01b0381166112895760405162461bcd60e51b815260206004820152602860248201527f556e6f7264657265644b65795365742831303029202d204b65792063616e6e6f604482015267074206265203078360c41b60648201526084016102a6565b61129382826111bf565b156113125760405162461bcd60e51b815260206004820152604360248201527f556e6f726465726564416464726573735365742831303129202d20416464726560448201527f737320286b65792920616c72656164792065786973747320696e20746865207360648201526232ba1760e91b608482015260a4016102a6565b6001828101805480830182556000828152602090200180546001600160a01b0319166001600160a01b0385161790555461134c9190611b89565b6001600160a01b039091166000908152602092909252604090912055565b6005810154600090819060038401546113839190611b9c565b905060006113996000546001600160a01b031690565b6001600160a01b0316636407e0d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fa9190611b5a565b905080821261140d575060019392505050565b61141681611bc3565b8213611426575060029392505050565b5060009392505050565b6000611485826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166115029092919063ffffffff16565b805190915015610fd757808060200190518101906114a39190611bdf565b610fd75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016102a6565b6060611511848460008561151b565b90505b9392505050565b60608247101561157c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016102a6565b6001600160a01b0385163b6115d35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016102a6565b600080866001600160a01b031685876040516115ef9190611bfc565b60006040518083038185875af1925050503d806000811461162c576040519150601f19603f3d011682016040523d82523d6000602084013e611631565b606091505b509150915061164182828661164c565b979650505050505050565b6060831561165b575081611514565b82511561166b5782518084602001fd5b8160405162461bcd60e51b81526004016102a69190611c18565b60405180608001604052806060815260200160006001600160a01b0316815260200160608152602001606081525090565b60005b838110156116d15781810151838201526020016116b9565b50506000910152565b600081518084526116f28160208601602086016116b6565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b8381101561173f5781516001600160a01b03168752958201959082019060010161171a565b509495945050505050565b600081516080845261175f60808501826116da565b905060018060a01b0360208401511660208501526040830151848203604086015261178a8282611706565b915050606083015184820360608601526117a48282611706565b95945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561180257603f198886030184526117f085835161174a565b945092850192908501906001016117d4565b5092979650505050505050565b6000806020838503121561182257600080fd5b823567ffffffffffffffff8082111561183a57600080fd5b818501915085601f83011261184e57600080fd5b81358181111561185d57600080fd5b86602082850101111561186f57600080fd5b60209290920196919550909350505050565b602081526000611514602083018461174a565b8015158114610eeb57600080fd5b600080604083850312156118b557600080fd5b8235915060208301356118c781611894565b809150509250929050565b6000602082840312156118e457600080fd5b81356003811061151457600080fd5b60006020828403121561190557600080fd5b81356001600160a01b038116811461151457600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156110bc576110bc611948565b60006001820161198357611983611948565b5060010190565b6000826119a757634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156119c6576119c6611948565b500290565b600181811c908216806119df57607f821691505b602082108103610e6f57634e487b7160e01b600052602260045260246000fd5b601f821115610fd757600081815260208120601f850160051c81016020861015611a265750805b601f850160051c820191505b8181101561052b57828155600101611a32565b67ffffffffffffffff831115611a5d57611a5d61191c565b611a7183611a6b83546119cb565b836119ff565b6000601f841160018114611aa55760008515611a8d5750838201355b600019600387901b1c1916600186901b178355611aff565b600083815260209020601f19861690835b82811015611ad65786850135825560209485019460019092019101611ab6565b5086821015611af35760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b6001600160801b031986811682528516602082015260806040820181905281018390526000838560a0840137600060a0858401015260a0601f19601f86011683010190508260608301529695505050505050565b600060208284031215611b6c57600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fd5b818103818111156110bc576110bc611948565b8181036000831280158383131683831282161715611bbc57611bbc611948565b5092915050565b6000600160ff1b8201611bd857611bd8611948565b5060000390565b600060208284031215611bf157600080fd5b815161151481611894565b60008251611c0e8184602087016116b6565b9190910192915050565b60208152600061151460208301846116da56fea2646970667358221220b1cca8f5e4ce2b02a92a9eacef45ffe6427b969281c247f7761da10e39490a7b64736f6c63430008100033"; type GoldenBountyQuestionConstructorParams = | [signer?: Signer] diff --git a/typechain/factories/contracts/GoldenBounty.sol/GoldenBounty__factory.ts b/typechain/factories/contracts/GoldenBounty.sol/GoldenBounty__factory.ts index 8594221b..bd8f3d15 100644 --- a/typechain/factories/contracts/GoldenBounty.sol/GoldenBounty__factory.ts +++ b/typechain/factories/contracts/GoldenBounty.sol/GoldenBounty__factory.ts @@ -167,7 +167,7 @@ const _abi = [ ]; const _bytecode = - "0x608060405234801561001057600080fd5b506040516129c33803806129c383398101604081905261002f916100b1565b61003833610061565b600180546001600160a01b0319166001600160a01b0393909316929092179091556002556100eb565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080604083850312156100c457600080fd5b82516001600160a01b03811681146100db57600080fd5b6020939093015192949293505050565b6128c9806100fa6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80636407e0d414610067578063715018a6146100835780638da5cb5b1461008d5780639902b633146100b2578063d6fbfb24146100c5578063f2fde38b146100d8575b600080fd5b61007060025481565b6040519081526020015b60405180910390f35b61008b6100eb565b005b6000546001600160a01b03165b6040516001600160a01b03909116815260200161007a565b61008b6100c03660046107ac565b6100ff565b61009a6100d33660046107e2565b61010c565b61008b6100e636600461081e565b6103c3565b6100f361043c565b6100fd6000610496565b565b61010761043c565b600255565b6001546040805163313ce56760e01b815290516000926001600160a01b03169163313ce5679160048083019260209291908290030181865afa158015610156573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061017a9190610847565b61018590600a610966565b61018f9083610975565b156102075760405162461bcd60e51b815260206004820152603860248201527f476f6c64656e426f756e74793a20426f756e7479206d7573742062652061206d60448201527f756c7469706c65206f66203120476f6c64656e546f6b656e000000000000000060648201526084015b60405180910390fd5b60015482906001600160a01b031663dd62ed3e336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381865afa158015610265573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102899190610997565b10156102e35760405162461bcd60e51b8152602060048201526024808201527f476f6c64656e426f756e74793a20696e73756666696369656e7420616c6c6f77604482015263616e636560e01b60648201526084016101fe565b6001546000906001600160a01b03163386866040516103019061079e565b6001600160a01b0394851681529390921660208401526001600160801b03199081166040840152166060820152608001604051809103906000f08015801561034d573d6000803e3d6000fd5b50905080610369336001546001600160a01b03169083876104e6565b604080516001600160801b03198089168252871660208201526001600160a01b038316917f3076d13066db8356cf7cd41e2693da7420b7e1fbe6068dcf215ea724df87b3a2910160405180910390a29150505b9392505050565b6103cb61043c565b6001600160a01b0381166104305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101fe565b61043981610496565b50565b6000546001600160a01b031633146100fd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101fe565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610540908590610546565b50505050565b600061059b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661061d9092919063ffffffff16565b80519091501561061857808060200190518101906105b991906109b0565b6106185760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016101fe565b505050565b606061062c8484600085610634565b949350505050565b6060824710156106955760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016101fe565b6001600160a01b0385163b6106ec5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101fe565b600080866001600160a01b0316858760405161070891906109f6565b60006040518083038185875af1925050503d8060008114610745576040519150601f19603f3d011682016040523d82523d6000602084013e61074a565b606091505b509150915061075a828286610765565b979650505050505050565b606083156107745750816103bc565b8251156107845782518084602001fd5b8160405162461bcd60e51b81526004016101fe9190610a12565b611e4e8062000a4683390190565b6000602082840312156107be57600080fd5b5035919050565b80356001600160801b0319811681146107dd57600080fd5b919050565b6000806000606084860312156107f757600080fd5b610800846107c5565b925061080e602085016107c5565b9150604084013590509250925092565b60006020828403121561083057600080fd5b81356001600160a01b03811681146103bc57600080fd5b60006020828403121561085957600080fd5b815160ff811681146103bc57600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b808511156108bb5781600019048211156108a1576108a161086a565b808516156108ae57918102915b93841c9390800290610885565b509250929050565b6000826108d257506001610960565b816108df57506000610960565b81600181146108f557600281146108ff5761091b565b6001915050610960565b60ff8411156109105761091061086a565b50506001821b610960565b5060208310610133831016604e8410600b841016171561093e575081810a610960565b6109488383610880565b806000190482111561095c5761095c61086a565b0290505b92915050565b60006103bc60ff8416836108c3565b60008261099257634e487b7160e01b600052601260045260246000fd5b500690565b6000602082840312156109a957600080fd5b5051919050565b6000602082840312156109c257600080fd5b815180151581146103bc57600080fd5b60005b838110156109ed5781810151838201526020016109d5565b50506000910152565b60008251610a088184602087016109d2565b9190910192915050565b6020815260008251806020840152610a318160408501602087016109d2565b601f01601f1916919091016040019291505056fe60806040523480156200001157600080fd5b5060405162001e4e38038062001e4e833981016040819052620000349162000180565b6200003f33620000fa565b6001600160a01b038316620000b25760405162461bcd60e51b815260206004820152602f60248201527f476f6c64656e426f756e74795175657374696f6e3a2061736b6572206973207460448201526e6865207a65726f206164647265737360881b606482015260840160405180910390fd5b600180546001600160a01b039586166001600160a01b0319918216179091556002805494909516931692909217909255608090811c600160801b0291901c17600355620001dd565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200016257600080fd5b919050565b80516001600160801b0319811681146200016257600080fd5b600080600080608085870312156200019757600080fd5b620001a2856200014a565b9350620001b2602086016200014a565b9250620001c26040860162000167565b9150620001d26060860162000167565b905092959194509250565b611c6180620001ed6000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063943dfef111610097578063c9d27afe11610066578063c9d27afe146101f5578063da7e18c714610208578063e1145e4b1461021b578063f2fde38b1461022357600080fd5b8063943dfef1146101b05780639c314545146101c6578063bbe0ba85146101ce578063c7a66eb3146101e257600080fd5b80637a2faee0116100d35780637a2faee01461013d57806388775d8f1461016357806388fae0e9146101765780638da5cb5b1461018b57600080fd5b80634627216d1461010557806363bd1d4a146101235780636573f31e1461012d578063715018a614610135575b600080fd5b61010d610236565b60405161011a91906117ad565b60405180910390f35b61012b610247565b005b61010d610533565b61012b61053f565b60035461014a9060801b81565b6040516001600160801b0319909116815260200161011a565b61012b61017136600461180f565b610553565b61017e610652565b60405161011a9190611881565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161011a565b6101b86107de565b60405190815260200161011a565b61010d61084b565b60035461014a90600160801b900460801b81565b600254610198906001600160a01b031681565b61012b6102033660046118a2565b610857565b61010d6102163660046118d2565b6109b4565b61010d610c38565b61012b6102313660046118f3565b610e75565b606061024260026109b4565b905090565b6002546001600160a01b0316336001600160a01b0316146102af5760405162461bcd60e51b815260206004820152601f60248201527f476f6c64656e426f756e74795175657374696f6e3a206f6e6c7941736b65720060448201526064015b60405180910390fd5b60006102b961084b565b90506000815167ffffffffffffffff8111156102d7576102d761191c565b604051908082528060200260200182016040528015610300578160200160208202803683370190505b5090506000805b835181101561039e5783818151811061032257610322611932565b60200260200101516020015183828151811061034057610340611932565b60200260200101906001600160a01b031690816001600160a01b03168152505083818151811061037257610372611932565b602002602001015160400151518261038a919061195e565b91508061039681611971565b915050610307565b5060008167ffffffffffffffff8111156103ba576103ba61191c565b6040519080825280602002602001820160405280156103e3578160200160208202803683370190505b5090506000805b85518110156104b05760005b86828151811061040857610408611932565b6020026020010151604001515181101561049d5786828151811061042e5761042e611932565b602002602001015160400151818151811061044b5761044b611932565b602002602001015184848151811061046557610465611932565b6001600160a01b03909216602092830291909101909101528261048781611971565b935050808061049590611971565b9150506103f6565b50806104a881611971565b9150506103ea565b5060006104bb6107de565b90506104dc6104cb600a8361198a565b6104d69060066119ac565b86610eee565b6104fb6104ea600a8361198a565b6104f59060036119ac565b84610eee565b61052b6105106000546001600160a01b031690565b6105186107de565b6001546001600160a01b03169190610f85565b505050505050565b606061024260006109b4565b610547610fdc565b6105516000611036565b565b806105ae5760405162461bcd60e51b815260206004820152602560248201527f476f6c64656e426f756e74795175657374696f6e3a20616e7377657220697320604482015264656d70747960d81b60648201526084016102a6565b336000818152600460205260409020806105c9848683611a45565b506001810180546001600160a01b0319166001600160a01b0384161790556105f2600583611086565b6003547ffd045500a034a5e731f843b696fcd566854cd7ccb879d6b3adb708152bbe43e690608081811b91600160801b9004901b86866106336005886110a2565b604051610644959493929190611b06565b60405180910390a150505050565b61065a611685565b60006106646110c2565b90506040518060800160405280826000018054610680906119cb565b80601f01602080910402602001604051908101604052809291908181526020018280546106ac906119cb565b80156106f95780601f106106ce576101008083540402835291602001916106f9565b820191906000526020600020905b8154815290600101906020018083116106dc57829003601f168201915b505050918352505060018301546001600160a01b0316602080830191909152600384018054604080518285028101850182528281529401939283018282801561076b57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161074d575b50505050508152602001826004016001018054806020026020016040519081016040528092919081815260200182805480156107d057602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116107b2575b505050505081525091505090565b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102429190611b5a565b606061024260016109b4565b60065482106108c75760405162461bcd60e51b815260206004820152603660248201527f476f6c64656e426f756e74795175657374696f6e3a207468657265206973206e6044820152750de40c2dce6eecae440c2e840e8d0c2e840d2dcc8caf60531b60648201526084016102a6565b60006004816108d760058661118c565b6001600160a01b03166001600160a01b03168152602001908152602001600020905060006109023390565b905061091160028301826111bf565b158015610928575061092660048301826111bf565b155b6109895760405162461bcd60e51b815260206004820152602c60248201527f476f6c64656e426f756e74795175657374696f6e3a20796f752068617665206160448201526b1b1c9958591e481d9bdd195960a21b60648201526084016102a6565b82156109a15761099c6002830182611222565b6109ae565b6109ae6004830182611222565b50505050565b60065460609060009067ffffffffffffffff8111156109d5576109d561191c565b604051908082528060200260200182016040528015610a0e57816020015b6109fb611685565b8152602001906001900390816109f35790505b5090506000805b600654811015610c2f576000610a2c60058361118c565b6001600160a01b0381166000908152600460205260408120919250610a508261136a565b9050876002811115610a6457610a64611b73565b816002811115610a7657610a76611b73565b03610c19576040518060800160405280836000018054610a95906119cb565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac1906119cb565b8015610b0e5780601f10610ae357610100808354040283529160200191610b0e565b820191906000526020600020905b815481529060010190602001808311610af157829003601f168201915b505050918352505060018401546001600160a01b03166020808301919091526003850180546040805182850281018501825282815294019392830182828015610b8057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b62575b5050505050815260200183600401600101805480602002602001604051908101604052809291908181526020018280548015610be557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610bc7575b5050505050815250868681518110610bff57610bff611932565b60200260200101819052508480610c1590611971565b9550505b5050508080610c2790611971565b915050610a15565b50909392505050565b60065460609060009067ffffffffffffffff811115610c5957610c5961191c565b604051908082528060200260200182016040528015610c9257816020015b610c7f611685565b815260200190600190039081610c775790505b50905060005b600654811015610e6f576000610caf60058361118c565b6001600160a01b0381166000908152600460205260409081902081516080810190925280549293509181908390610ce5906119cb565b80601f0160208091040260200160405190810160405280929190818152602001828054610d11906119cb565b8015610d5e5780601f10610d3357610100808354040283529160200191610d5e565b820191906000526020600020905b815481529060010190602001808311610d4157829003601f168201915b505050918352505060018301546001600160a01b03166020808301919091526003840180546040805182850281018501825282815294019392830182828015610dd057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610db2575b5050505050815260200182600401600101805480602002602001604051908101604052809291908181526020018280548015610e3557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e17575b5050505050815250848481518110610e4f57610e4f611932565b602002602001018190525050508080610e6790611971565b915050610c98565b50919050565b610e7d610fdc565b6001600160a01b038116610ee25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102a6565b610eeb81611036565b50565b600080825184610efe919061198a565b905060005b8351811015610f5d57610f3f848281518110610f2157610f21611932565b60209081029190910101516001546001600160a01b03169084610f85565b610f49828461195e565b925080610f5581611971565b915050610f03565b50838210156109ae576109ae610f7b6000546001600160a01b031690565b6105188487611b89565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610fd7908490611430565b505050565b6000546001600160a01b031633146105515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102a6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61109082826111bf565b61109e5761109e8282611222565b5050565b6001600160a01b0381166000908152602083905260409020545b92915050565b60008080805b6006548110156111555760006004816110e260058561118c565b6001600160a01b03166001600160a01b031681526020019081526020016000209050600061110f8261136a565b9050600181600281111561112557611125611b73565b036111405760038201548581111561113e578095508394505b505b5050808061114d90611971565b9150506110c8565b506004600061116560058461118c565b6001600160a01b03166001600160a01b031681526020019081526020016000209250505090565b60008260010182815481106111a3576111a3611932565b6000918252602090912001546001600160a01b03169392505050565b600182015460009081036111d5575060006110bc565b6001600160a01b038216600081815260208590526040902054600185018054909190811061120557611205611932565b6000918252602090912001546001600160a01b0316149392505050565b6001600160a01b0381166112895760405162461bcd60e51b815260206004820152602860248201527f556e6f7264657265644b65795365742831303029202d204b65792063616e6e6f604482015267074206265203078360c41b60648201526084016102a6565b61129382826111bf565b156113125760405162461bcd60e51b815260206004820152604360248201527f556e6f726465726564416464726573735365742831303129202d20416464726560448201527f737320286b65792920616c72656164792065786973747320696e20746865207360648201526232ba1760e91b608482015260a4016102a6565b6001828101805480830182556000828152602090200180546001600160a01b0319166001600160a01b0385161790555461134c9190611b89565b6001600160a01b039091166000908152602092909252604090912055565b6005810154600090819060038401546113839190611b9c565b905060006113996000546001600160a01b031690565b6001600160a01b0316636407e0d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fa9190611b5a565b905080821261140d575060019392505050565b61141681611bc3565b8213611426575060029392505050565b5060009392505050565b6000611485826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166115029092919063ffffffff16565b805190915015610fd757808060200190518101906114a39190611bdf565b610fd75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016102a6565b6060611511848460008561151b565b90505b9392505050565b60608247101561157c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016102a6565b6001600160a01b0385163b6115d35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016102a6565b600080866001600160a01b031685876040516115ef9190611bfc565b60006040518083038185875af1925050503d806000811461162c576040519150601f19603f3d011682016040523d82523d6000602084013e611631565b606091505b509150915061164182828661164c565b979650505050505050565b6060831561165b575081611514565b82511561166b5782518084602001fd5b8160405162461bcd60e51b81526004016102a69190611c18565b60405180608001604052806060815260200160006001600160a01b0316815260200160608152602001606081525090565b60005b838110156116d15781810151838201526020016116b9565b50506000910152565b600081518084526116f28160208601602086016116b6565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b8381101561173f5781516001600160a01b03168752958201959082019060010161171a565b509495945050505050565b600081516080845261175f60808501826116da565b905060018060a01b0360208401511660208501526040830151848203604086015261178a8282611706565b915050606083015184820360608601526117a48282611706565b95945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561180257603f198886030184526117f085835161174a565b945092850192908501906001016117d4565b5092979650505050505050565b6000806020838503121561182257600080fd5b823567ffffffffffffffff8082111561183a57600080fd5b818501915085601f83011261184e57600080fd5b81358181111561185d57600080fd5b86602082850101111561186f57600080fd5b60209290920196919550909350505050565b602081526000611514602083018461174a565b8015158114610eeb57600080fd5b600080604083850312156118b557600080fd5b8235915060208301356118c781611894565b809150509250929050565b6000602082840312156118e457600080fd5b81356003811061151457600080fd5b60006020828403121561190557600080fd5b81356001600160a01b038116811461151457600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156110bc576110bc611948565b60006001820161198357611983611948565b5060010190565b6000826119a757634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156119c6576119c6611948565b500290565b600181811c908216806119df57607f821691505b602082108103610e6f57634e487b7160e01b600052602260045260246000fd5b601f821115610fd757600081815260208120601f850160051c81016020861015611a265750805b601f850160051c820191505b8181101561052b57828155600101611a32565b67ffffffffffffffff831115611a5d57611a5d61191c565b611a7183611a6b83546119cb565b836119ff565b6000601f841160018114611aa55760008515611a8d5750838201355b600019600387901b1c1916600186901b178355611aff565b600083815260209020601f19861690835b82811015611ad65786850135825560209485019460019092019101611ab6565b5086821015611af35760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b6001600160801b031986811682528516602082015260806040820181905281018390526000838560a0840137600060a0858401015260a0601f19601f86011683010190508260608301529695505050505050565b600060208284031215611b6c57600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fd5b818103818111156110bc576110bc611948565b8181036000831280158383131683831282161715611bbc57611bbc611948565b5092915050565b6000600160ff1b8201611bd857611bd8611948565b5060000390565b600060208284031215611bf157600080fd5b815161151481611894565b60008251611c0e8184602087016116b6565b9190910192915050565b60208152600061151460208301846116da56fea26469706673582212204e97ea5b4c8e8934daf7b6b65f2954e0085493f12da141c29606380f5b353bf264736f6c63430008100033a264697066735822122034b66f47eadeaed38e8d4bb371bb885929bd0f18b17d5d7e466d62dbf11dd76f64736f6c63430008100033"; + "0x608060405234801561001057600080fd5b506040516129c33803806129c383398101604081905261002f916100b1565b61003833610061565b600180546001600160a01b0319166001600160a01b0393909316929092179091556002556100eb565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080604083850312156100c457600080fd5b82516001600160a01b03811681146100db57600080fd5b6020939093015192949293505050565b6128c9806100fa6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80636407e0d414610067578063715018a6146100835780638da5cb5b1461008d5780639902b633146100b2578063d6fbfb24146100c5578063f2fde38b146100d8575b600080fd5b61007060025481565b6040519081526020015b60405180910390f35b61008b6100eb565b005b6000546001600160a01b03165b6040516001600160a01b03909116815260200161007a565b61008b6100c03660046107ac565b6100ff565b61009a6100d33660046107e2565b61010c565b61008b6100e636600461081e565b6103c3565b6100f361043c565b6100fd6000610496565b565b61010761043c565b600255565b6001546040805163313ce56760e01b815290516000926001600160a01b03169163313ce5679160048083019260209291908290030181865afa158015610156573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061017a9190610847565b61018590600a610966565b61018f9083610975565b156102075760405162461bcd60e51b815260206004820152603860248201527f476f6c64656e426f756e74793a20426f756e7479206d7573742062652061206d60448201527f756c7469706c65206f66203120476f6c64656e546f6b656e000000000000000060648201526084015b60405180910390fd5b60015482906001600160a01b031663dd62ed3e336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381865afa158015610265573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102899190610997565b10156102e35760405162461bcd60e51b8152602060048201526024808201527f476f6c64656e426f756e74793a20696e73756666696369656e7420616c6c6f77604482015263616e636560e01b60648201526084016101fe565b6001546000906001600160a01b03163386866040516103019061079e565b6001600160a01b0394851681529390921660208401526001600160801b03199081166040840152166060820152608001604051809103906000f08015801561034d573d6000803e3d6000fd5b50905080610369336001546001600160a01b03169083876104e6565b604080516001600160801b03198089168252871660208201526001600160a01b038316917f3076d13066db8356cf7cd41e2693da7420b7e1fbe6068dcf215ea724df87b3a2910160405180910390a29150505b9392505050565b6103cb61043c565b6001600160a01b0381166104305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101fe565b61043981610496565b50565b6000546001600160a01b031633146100fd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101fe565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610540908590610546565b50505050565b600061059b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661061d9092919063ffffffff16565b80519091501561061857808060200190518101906105b991906109b0565b6106185760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016101fe565b505050565b606061062c8484600085610634565b949350505050565b6060824710156106955760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016101fe565b6001600160a01b0385163b6106ec5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101fe565b600080866001600160a01b0316858760405161070891906109f6565b60006040518083038185875af1925050503d8060008114610745576040519150601f19603f3d011682016040523d82523d6000602084013e61074a565b606091505b509150915061075a828286610765565b979650505050505050565b606083156107745750816103bc565b8251156107845782518084602001fd5b8160405162461bcd60e51b81526004016101fe9190610a12565b611e4e8062000a4683390190565b6000602082840312156107be57600080fd5b5035919050565b80356001600160801b0319811681146107dd57600080fd5b919050565b6000806000606084860312156107f757600080fd5b610800846107c5565b925061080e602085016107c5565b9150604084013590509250925092565b60006020828403121561083057600080fd5b81356001600160a01b03811681146103bc57600080fd5b60006020828403121561085957600080fd5b815160ff811681146103bc57600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b808511156108bb5781600019048211156108a1576108a161086a565b808516156108ae57918102915b93841c9390800290610885565b509250929050565b6000826108d257506001610960565b816108df57506000610960565b81600181146108f557600281146108ff5761091b565b6001915050610960565b60ff8411156109105761091061086a565b50506001821b610960565b5060208310610133831016604e8410600b841016171561093e575081810a610960565b6109488383610880565b806000190482111561095c5761095c61086a565b0290505b92915050565b60006103bc60ff8416836108c3565b60008261099257634e487b7160e01b600052601260045260246000fd5b500690565b6000602082840312156109a957600080fd5b5051919050565b6000602082840312156109c257600080fd5b815180151581146103bc57600080fd5b60005b838110156109ed5781810151838201526020016109d5565b50506000910152565b60008251610a088184602087016109d2565b9190910192915050565b6020815260008251806020840152610a318160408501602087016109d2565b601f01601f1916919091016040019291505056fe60806040523480156200001157600080fd5b5060405162001e4e38038062001e4e833981016040819052620000349162000180565b6200003f33620000fa565b6001600160a01b038316620000b25760405162461bcd60e51b815260206004820152602f60248201527f476f6c64656e426f756e74795175657374696f6e3a2061736b6572206973207460448201526e6865207a65726f206164647265737360881b606482015260840160405180910390fd5b600180546001600160a01b039586166001600160a01b0319918216179091556002805494909516931692909217909255608090811c600160801b0291901c17600355620001dd565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200016257600080fd5b919050565b80516001600160801b0319811681146200016257600080fd5b600080600080608085870312156200019757600080fd5b620001a2856200014a565b9350620001b2602086016200014a565b9250620001c26040860162000167565b9150620001d26060860162000167565b905092959194509250565b611c6180620001ed6000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063943dfef111610097578063c9d27afe11610066578063c9d27afe146101f5578063da7e18c714610208578063e1145e4b1461021b578063f2fde38b1461022357600080fd5b8063943dfef1146101b05780639c314545146101c6578063bbe0ba85146101ce578063c7a66eb3146101e257600080fd5b80637a2faee0116100d35780637a2faee01461013d57806388775d8f1461016357806388fae0e9146101765780638da5cb5b1461018b57600080fd5b80634627216d1461010557806363bd1d4a146101235780636573f31e1461012d578063715018a614610135575b600080fd5b61010d610236565b60405161011a91906117ad565b60405180910390f35b61012b610247565b005b61010d610533565b61012b61053f565b60035461014a9060801b81565b6040516001600160801b0319909116815260200161011a565b61012b61017136600461180f565b610553565b61017e610652565b60405161011a9190611881565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161011a565b6101b86107de565b60405190815260200161011a565b61010d61084b565b60035461014a90600160801b900460801b81565b600254610198906001600160a01b031681565b61012b6102033660046118a2565b610857565b61010d6102163660046118d2565b6109b4565b61010d610c38565b61012b6102313660046118f3565b610e75565b606061024260026109b4565b905090565b6002546001600160a01b0316336001600160a01b0316146102af5760405162461bcd60e51b815260206004820152601f60248201527f476f6c64656e426f756e74795175657374696f6e3a206f6e6c7941736b65720060448201526064015b60405180910390fd5b60006102b961084b565b90506000815167ffffffffffffffff8111156102d7576102d761191c565b604051908082528060200260200182016040528015610300578160200160208202803683370190505b5090506000805b835181101561039e5783818151811061032257610322611932565b60200260200101516020015183828151811061034057610340611932565b60200260200101906001600160a01b031690816001600160a01b03168152505083818151811061037257610372611932565b602002602001015160400151518261038a919061195e565b91508061039681611971565b915050610307565b5060008167ffffffffffffffff8111156103ba576103ba61191c565b6040519080825280602002602001820160405280156103e3578160200160208202803683370190505b5090506000805b85518110156104b05760005b86828151811061040857610408611932565b6020026020010151604001515181101561049d5786828151811061042e5761042e611932565b602002602001015160400151818151811061044b5761044b611932565b602002602001015184848151811061046557610465611932565b6001600160a01b03909216602092830291909101909101528261048781611971565b935050808061049590611971565b9150506103f6565b50806104a881611971565b9150506103ea565b5060006104bb6107de565b90506104dc6104cb600a8361198a565b6104d69060066119ac565b86610eee565b6104fb6104ea600a8361198a565b6104f59060036119ac565b84610eee565b61052b6105106000546001600160a01b031690565b6105186107de565b6001546001600160a01b03169190610f85565b505050505050565b606061024260006109b4565b610547610fdc565b6105516000611036565b565b806105ae5760405162461bcd60e51b815260206004820152602560248201527f476f6c64656e426f756e74795175657374696f6e3a20616e7377657220697320604482015264656d70747960d81b60648201526084016102a6565b336000818152600460205260409020806105c9848683611a45565b506001810180546001600160a01b0319166001600160a01b0384161790556105f2600583611086565b6003547ffd045500a034a5e731f843b696fcd566854cd7ccb879d6b3adb708152bbe43e690608081811b91600160801b9004901b86866106336005886110a2565b604051610644959493929190611b06565b60405180910390a150505050565b61065a611685565b60006106646110c2565b90506040518060800160405280826000018054610680906119cb565b80601f01602080910402602001604051908101604052809291908181526020018280546106ac906119cb565b80156106f95780601f106106ce576101008083540402835291602001916106f9565b820191906000526020600020905b8154815290600101906020018083116106dc57829003601f168201915b505050918352505060018301546001600160a01b0316602080830191909152600384018054604080518285028101850182528281529401939283018282801561076b57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161074d575b50505050508152602001826004016001018054806020026020016040519081016040528092919081815260200182805480156107d057602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116107b2575b505050505081525091505090565b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102429190611b5a565b606061024260016109b4565b60065482106108c75760405162461bcd60e51b815260206004820152603660248201527f476f6c64656e426f756e74795175657374696f6e3a207468657265206973206e6044820152750de40c2dce6eecae440c2e840e8d0c2e840d2dcc8caf60531b60648201526084016102a6565b60006004816108d760058661118c565b6001600160a01b03166001600160a01b03168152602001908152602001600020905060006109023390565b905061091160028301826111bf565b158015610928575061092660048301826111bf565b155b6109895760405162461bcd60e51b815260206004820152602c60248201527f476f6c64656e426f756e74795175657374696f6e3a20796f752068617665206160448201526b1b1c9958591e481d9bdd195960a21b60648201526084016102a6565b82156109a15761099c6002830182611222565b6109ae565b6109ae6004830182611222565b50505050565b60065460609060009067ffffffffffffffff8111156109d5576109d561191c565b604051908082528060200260200182016040528015610a0e57816020015b6109fb611685565b8152602001906001900390816109f35790505b5090506000805b600654811015610c2f576000610a2c60058361118c565b6001600160a01b0381166000908152600460205260408120919250610a508261136a565b9050876002811115610a6457610a64611b73565b816002811115610a7657610a76611b73565b03610c19576040518060800160405280836000018054610a95906119cb565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac1906119cb565b8015610b0e5780601f10610ae357610100808354040283529160200191610b0e565b820191906000526020600020905b815481529060010190602001808311610af157829003601f168201915b505050918352505060018401546001600160a01b03166020808301919091526003850180546040805182850281018501825282815294019392830182828015610b8057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b62575b5050505050815260200183600401600101805480602002602001604051908101604052809291908181526020018280548015610be557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610bc7575b5050505050815250868681518110610bff57610bff611932565b60200260200101819052508480610c1590611971565b9550505b5050508080610c2790611971565b915050610a15565b50909392505050565b60065460609060009067ffffffffffffffff811115610c5957610c5961191c565b604051908082528060200260200182016040528015610c9257816020015b610c7f611685565b815260200190600190039081610c775790505b50905060005b600654811015610e6f576000610caf60058361118c565b6001600160a01b0381166000908152600460205260409081902081516080810190925280549293509181908390610ce5906119cb565b80601f0160208091040260200160405190810160405280929190818152602001828054610d11906119cb565b8015610d5e5780601f10610d3357610100808354040283529160200191610d5e565b820191906000526020600020905b815481529060010190602001808311610d4157829003601f168201915b505050918352505060018301546001600160a01b03166020808301919091526003840180546040805182850281018501825282815294019392830182828015610dd057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610db2575b5050505050815260200182600401600101805480602002602001604051908101604052809291908181526020018280548015610e3557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e17575b5050505050815250848481518110610e4f57610e4f611932565b602002602001018190525050508080610e6790611971565b915050610c98565b50919050565b610e7d610fdc565b6001600160a01b038116610ee25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102a6565b610eeb81611036565b50565b600080825184610efe919061198a565b905060005b8351811015610f5d57610f3f848281518110610f2157610f21611932565b60209081029190910101516001546001600160a01b03169084610f85565b610f49828461195e565b925080610f5581611971565b915050610f03565b50838210156109ae576109ae610f7b6000546001600160a01b031690565b6105188487611b89565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610fd7908490611430565b505050565b6000546001600160a01b031633146105515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102a6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61109082826111bf565b61109e5761109e8282611222565b5050565b6001600160a01b0381166000908152602083905260409020545b92915050565b60008080805b6006548110156111555760006004816110e260058561118c565b6001600160a01b03166001600160a01b031681526020019081526020016000209050600061110f8261136a565b9050600181600281111561112557611125611b73565b036111405760038201548581111561113e578095508394505b505b5050808061114d90611971565b9150506110c8565b506004600061116560058461118c565b6001600160a01b03166001600160a01b031681526020019081526020016000209250505090565b60008260010182815481106111a3576111a3611932565b6000918252602090912001546001600160a01b03169392505050565b600182015460009081036111d5575060006110bc565b6001600160a01b038216600081815260208590526040902054600185018054909190811061120557611205611932565b6000918252602090912001546001600160a01b0316149392505050565b6001600160a01b0381166112895760405162461bcd60e51b815260206004820152602860248201527f556e6f7264657265644b65795365742831303029202d204b65792063616e6e6f604482015267074206265203078360c41b60648201526084016102a6565b61129382826111bf565b156113125760405162461bcd60e51b815260206004820152604360248201527f556e6f726465726564416464726573735365742831303129202d20416464726560448201527f737320286b65792920616c72656164792065786973747320696e20746865207360648201526232ba1760e91b608482015260a4016102a6565b6001828101805480830182556000828152602090200180546001600160a01b0319166001600160a01b0385161790555461134c9190611b89565b6001600160a01b039091166000908152602092909252604090912055565b6005810154600090819060038401546113839190611b9c565b905060006113996000546001600160a01b031690565b6001600160a01b0316636407e0d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fa9190611b5a565b905080821261140d575060019392505050565b61141681611bc3565b8213611426575060029392505050565b5060009392505050565b6000611485826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166115029092919063ffffffff16565b805190915015610fd757808060200190518101906114a39190611bdf565b610fd75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016102a6565b6060611511848460008561151b565b90505b9392505050565b60608247101561157c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016102a6565b6001600160a01b0385163b6115d35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016102a6565b600080866001600160a01b031685876040516115ef9190611bfc565b60006040518083038185875af1925050503d806000811461162c576040519150601f19603f3d011682016040523d82523d6000602084013e611631565b606091505b509150915061164182828661164c565b979650505050505050565b6060831561165b575081611514565b82511561166b5782518084602001fd5b8160405162461bcd60e51b81526004016102a69190611c18565b60405180608001604052806060815260200160006001600160a01b0316815260200160608152602001606081525090565b60005b838110156116d15781810151838201526020016116b9565b50506000910152565b600081518084526116f28160208601602086016116b6565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b8381101561173f5781516001600160a01b03168752958201959082019060010161171a565b509495945050505050565b600081516080845261175f60808501826116da565b905060018060a01b0360208401511660208501526040830151848203604086015261178a8282611706565b915050606083015184820360608601526117a48282611706565b95945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561180257603f198886030184526117f085835161174a565b945092850192908501906001016117d4565b5092979650505050505050565b6000806020838503121561182257600080fd5b823567ffffffffffffffff8082111561183a57600080fd5b818501915085601f83011261184e57600080fd5b81358181111561185d57600080fd5b86602082850101111561186f57600080fd5b60209290920196919550909350505050565b602081526000611514602083018461174a565b8015158114610eeb57600080fd5b600080604083850312156118b557600080fd5b8235915060208301356118c781611894565b809150509250929050565b6000602082840312156118e457600080fd5b81356003811061151457600080fd5b60006020828403121561190557600080fd5b81356001600160a01b038116811461151457600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156110bc576110bc611948565b60006001820161198357611983611948565b5060010190565b6000826119a757634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156119c6576119c6611948565b500290565b600181811c908216806119df57607f821691505b602082108103610e6f57634e487b7160e01b600052602260045260246000fd5b601f821115610fd757600081815260208120601f850160051c81016020861015611a265750805b601f850160051c820191505b8181101561052b57828155600101611a32565b67ffffffffffffffff831115611a5d57611a5d61191c565b611a7183611a6b83546119cb565b836119ff565b6000601f841160018114611aa55760008515611a8d5750838201355b600019600387901b1c1916600186901b178355611aff565b600083815260209020601f19861690835b82811015611ad65786850135825560209485019460019092019101611ab6565b5086821015611af35760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b6001600160801b031986811682528516602082015260806040820181905281018390526000838560a0840137600060a0858401015260a0601f19601f86011683010190508260608301529695505050505050565b600060208284031215611b6c57600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fd5b818103818111156110bc576110bc611948565b8181036000831280158383131683831282161715611bbc57611bbc611948565b5092915050565b6000600160ff1b8201611bd857611bd8611948565b5060000390565b600060208284031215611bf157600080fd5b815161151481611894565b60008251611c0e8184602087016116b6565b9190910192915050565b60208152600061151460208301846116da56fea2646970667358221220b1cca8f5e4ce2b02a92a9eacef45ffe6427b969281c247f7761da10e39490a7b64736f6c63430008100033a26469706673582212206329d0a8065091f64f1b5278af917e26d277d27d1a0b4d35b660774a8a08208464736f6c63430008100033"; type GoldenBountyConstructorParams = | [signer?: Signer] diff --git a/typechain/factories/contracts/GoldenToken__factory.ts b/typechain/factories/contracts/GoldenToken__factory.ts index 3d41a9ec..b2aaa133 100644 --- a/typechain/factories/contracts/GoldenToken__factory.ts +++ b/typechain/factories/contracts/GoldenToken__factory.ts @@ -902,7 +902,7 @@ const _abi = [ ]; const _bytecode = - "0x608060405234801561001057600080fd5b50612a79806100206000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c8063715018a611610125578063a694fc3a116100ad578063dd62ed3e1161007c578063dd62ed3e146104b8578063eb36854e146104cb578063f1127ed8146104de578063f2fde38b1461051b578063fe4b84df1461052e57600080fd5b8063a694fc3a1461046c578063a9059cbb1461047f578063c3cda52014610492578063d505accf146104a557600080fd5b80638da5cb5b116100f45780638da5cb5b1461041a5780638e539e8c1461042b57806395d89b411461043e5780639ab24eb014610446578063a457c2d71461045957600080fd5b8063715018a6146103d95780637cb569de146103e15780637ecebe00146103f457806384144dcf1461040757600080fd5b80633644e515116101a8578063587cde1e11610177578063587cde1e1461031e5780635c19a95c146103625780636c8848c2146103755780636fcfff451461038857806370a08231146103b057600080fd5b80633644e515146102dd57806339509351146102e55780633a46b1a8146102f8578063426233601461030b57600080fd5b806323b62302116101e457806323b623021461027e57806323b872dd146102a85780632e17de78146102bb578063313ce567146102ce57600080fd5b806302fb4d851461021657806306fdde031461022b578063095ea7b31461024957806318160ddd1461026c575b600080fd5b610229610224366004612554565b610541565b005b610233610573565b604051610240919061257e565b60405180910390f35b61025c610257366004612554565b610605565b6040519015158152602001610240565b6035545b604051908152602001610240565b61027061028c3660046125cc565b6001600160a01b03166000908152610130602052604090205490565b61025c6102b63660046125e7565b61061f565b6102296102c9366004612623565b610643565b60405160128152602001610240565b610270610659565b61025c6102f3366004612554565b610668565b610270610306366004612554565b61068a565b6102706103193660046125cc565b610709565b61034a61032c3660046125cc565b6001600160a01b03908116600090815260cc60205260409020541690565b6040516001600160a01b039091168152602001610240565b6102296103703660046125cc565b610728565b61022961038336600461263c565b610732565b61039b6103963660046125cc565b610755565b60405163ffffffff9091168152602001610240565b6102706103be3660046125cc565b6001600160a01b031660009081526033602052604090205490565b610229610777565b6102296103ef366004612554565b61078b565b6102706104023660046125cc565b61086c565b61022961041536600461263c565b61088a565b60fe546001600160a01b031661034a565b610270610439366004612623565b6108b7565b610233610913565b6102706104543660046125cc565b610922565b61025c610467366004612554565b61094f565b61022961047a366004612623565b6109ca565b61025c61048d366004612554565b6109d9565b6102296104a03660046126c8565b6109e7565b6102296104b3366004612720565b610b1d565b6102706104c636600461278a565b610c81565b6102296104d9366004612623565b610cac565b6104f16104ec3660046127bd565b610d6a565b60408051825163ffffffff1681526020928301516001600160e01b03169281019290925201610240565b6102296105293660046125cc565b610dee565b61022961053c366004612623565b610e64565b610549610ff3565b610553828261078b565b61056f3061056960fe546001600160a01b031690565b8361104d565b5050565b606060368054610582906127fd565b80601f01602080910402602001604051908101604052809291908181526020018280546105ae906127fd565b80156105fb5780601f106105d0576101008083540402835291602001916105fb565b820191906000526020600020905b8154815290600101906020018083116105de57829003601f168201915b5050505050905090565b600033610613818585611221565b60019150505b92915050565b60003361062d858285611345565b61063885858561104d565b506001949350505050565b61064c81610cac565b6106563033610569565b50565b60006106636113b9565b905090565b60003361061381858561067b8383610c81565b6106859190612847565b611221565b60004382106106e05760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e65640060448201526064015b60405180910390fd5b6001600160a01b038316600090815260cd602052604090206107029083611434565b9392505050565b6001600160a01b03811660009081526101306020526040812054610619565b61065633826114f1565b61073a610ff3565b61074583838361156b565b61074f30826109d9565b50505050565b6001600160a01b038116600090815260cd602052604081205461061990611764565b61077f610ff3565b61078960006117cd565b565b610793610ff3565b6001600160a01b038216600090815261013060205260409020548111156107fc5760405162461bcd60e51b815260206004820152601760248201527f5f736c6173683a20657863656564732062616c616e636500000000000000000060448201526064016106d7565b6001600160a01b038216600090815261013060205260408120805483929061082590849061285a565b90915550506040518181526001600160a01b038316907f4ed05e9673c26d2ed44f7ef6a7f2942df0ee3b5e1e17db4b99f9dcd261a339cd9060200160405180910390a25050565b6001600160a01b038116600090815260996020526040812054610619565b610892610ff3565b600061089f84848461181f565b905061074f3061056960fe546001600160a01b031690565b60004382106109085760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e65640060448201526064016106d7565b61061960ce83611434565b606060378054610582906127fd565b6001600160a01b0381166000908152610130602052604081205461094583611a68565b6106199190612847565b6000338161095d8286610c81565b9050838110156109bd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106d7565b6106388286868403611221565b6109d381611aef565b61056f30825b60003361061381858561104d565b83421115610a375760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e6174757265206578706972656400000060448201526064016106d7565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610ab190610aa99060a00160405160208183030381529060405280519060200120611b8d565b858585611bdb565b9050610abc81611c03565b8614610b0a5760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e63650000000000000060448201526064016106d7565b610b1481886114f1565b50505050505050565b83421115610b6d5760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016106d7565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610b9c8c611c03565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610bf782611b8d565b90506000610c0782878787611bdb565b9050896001600160a01b0316816001600160a01b031614610c6a5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016106d7565b610c758a8a8a611221565b50505050505050505050565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b3360009081526101306020526040902054811115610d0c5760405162461bcd60e51b815260206004820152601960248201527f5f756e7374616b653a20657863656564732062616c616e63650000000000000060448201526064016106d7565b336000908152610130602052604081208054839290610d2c90849061285a565b909155505060405181815233907f79d3df6837cc49ff0e09fd3258e6e45594e0703445bb06825e9d75156eaee8f0906020015b60405180910390a250565b60408051808201909152600080825260208201526001600160a01b038316600090815260cd60205260409020805463ffffffff8416908110610dae57610dae61286d565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b610df6610ff3565b6001600160a01b038116610e5b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106d7565b610656816117cd565b600054610100900460ff1615808015610e845750600054600160ff909116105b80610e9e5750303b158015610e9e575060005460ff166001145b610f015760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106d7565b6000805460ff191660011790558015610f24576000805461ff0019166101001790555b610f2c611c2b565b610f746040518060400160405280600b81526020016a23b7b63232b72a37b5b2b760a91b8152506040518060400160405280600381526020016211d31160ea1b815250611c5a565b610fa06040518060400160405280600b81526020016a23b7b63232b72a37b5b2b760a91b815250611c8b565b610faa3383611cd5565b801561056f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b60fe546001600160a01b031633146107895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106d7565b6001600160a01b0383166110b15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106d7565b6001600160a01b0382166111135760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106d7565b6001600160a01b0383166000908152603360205260409020548181101561118b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106d7565b6001600160a01b038085166000908152603360205260408082208585039055918516815290812080548492906111c2908490612847565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161120e91815260200190565b60405180910390a361074f848484611ce4565b6001600160a01b0383166112835760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106d7565b6001600160a01b0382166112e45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106d7565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006113518484610c81565b9050600019811461074f57818110156113ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106d7565b61074f8484848403611221565b60006106637f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6113e860655490565b6066546040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b8154600090815b8181101561149857600061144f8284611cef565b9050848682815481106114645761146461286d565b60009182526020909120015463ffffffff16111561148457809250611492565b61148f816001612847565b91505b5061143b565b81156114dc57846114aa60018461285a565b815481106114ba576114ba61286d565b60009182526020909120015464010000000090046001600160e01b03166114df565b60005b6001600160e01b031695945050505050565b6001600160a01b03828116600081815260cc6020818152604080842080546033845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461074f828483611d0a565b611573610ff3565b816115b45760405162461bcd60e51b815260206004820152601160248201527062756c6b5374616b65203020757365727360781b60448201526064016106d7565b600081116116045760405162461bcd60e51b815260206004820152601760248201527f62756c6b5374616b65203020746f74616c416d6f756e7400000000000000000060448201526064016106d7565b6000805b8381101561171c5760008585838181106116245761162461286d565b9050604002016020013590508061013060008888868181106116485761164861286d565b61165e92602060409092020190810191506125cc565b6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461168d9190612847565b9091555061169d90508184612847565b92508585838181106116b1576116b161286d565b6116c792602060409092020190810191506125cc565b6001600160a01b03167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d8260405161170191815260200190565b60405180910390a2508061171481612883565b915050611608565b5081811461074f5760405162461bcd60e51b81526020600482015260156024820152741a5b98dbdc9c9958dd081d1bdd185b105b5bdd5b9d605a1b60448201526064016106d7565b600063ffffffff8211156117c95760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b60648201526084016106d7565b5090565b60fe80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000611829610ff3565b8261186b5760405162461bcd60e51b81526020600482015260126024820152715f62756c6b536c617368203020757365727360701b60448201526064016106d7565b600082116118bb5760405162461bcd60e51b815260206004820152601860248201527f5f62756c6b536c617368203020746f74616c416d6f756e74000000000000000060448201526064016106d7565b60008060005b85811015611a175760008787838181106118dd576118dd61286d565b905060400201602001359050600061013060008a8a868181106119025761190261286d565b61191892602060409092020190810191506125cc565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050600081831161194a578261194c565b815b905061197f8a8a868181106119635761196361286d565b61197992602060409092020190810191506125cc565b8261078b565b6119898387612847565b95506119958186612847565b94508989858181106119a9576119a961286d565b6119bf92602060409092020190810191506125cc565b6001600160a01b03167f4ed05e9673c26d2ed44f7ef6a7f2942df0ee3b5e1e17db4b99f9dcd261a339cd826040516119f991815260200190565b60405180910390a25050508080611a0f90612883565b9150506118c1565b50838214611a5f5760405162461bcd60e51b81526020600482015260156024820152741a5b98dbdc9c9958dd081d1bdd185b105b5bdd5b9d605a1b60448201526064016106d7565b95945050505050565b6001600160a01b038116600090815260cd60205260408120548015611adc576001600160a01b038316600090815260cd60205260409020611aaa60018361285a565b81548110611aba57611aba61286d565b60009182526020909120015464010000000090046001600160e01b0316611adf565b60005b6001600160e01b03169392505050565b60008111611b365760405162461bcd60e51b815260206004820152601460248201527343616e6e6f74207374616b65206e6f7468696e6760601b60448201526064016106d7565b336000908152610130602052604081208054839290611b56908490612847565b909155505060405181815233907f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d90602001610d5f565b6000610619611b9a6113b9565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000611bec87878787611e47565b91509150611bf981611f34565b5095945050505050565b6001600160a01b03811660009081526099602052604090208054600181018255905b50919050565b600054610100900460ff16611c525760405162461bcd60e51b81526004016106d79061289c565b6107896120ea565b600054610100900460ff16611c815760405162461bcd60e51b81526004016106d79061289c565b61056f828261211a565b600054610100900460ff16611cb25760405162461bcd60e51b81526004016106d79061289c565b61065681604051806040016040528060018152602001603160f81b81525061215a565b61056f828261219b565b505050565b611cdf838383612225565b6000611cfe60028484186128e7565b61070290848416612847565b816001600160a01b0316836001600160a01b031614158015611d2c5750600081115b15611cdf576001600160a01b03831615611dba576001600160a01b038316600090815260cd602052604081208190611d679061225785612263565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611daf929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615611cdf576001600160a01b038216600090815260cd602052604081208190611df0906123dc85612263565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611e38929190918252602082015260400190565b60405180910390a25050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611e7e5750600090506003611f2b565b8460ff16601b14158015611e9657508460ff16601c14155b15611ea75750600090506004611f2b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611efb573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611f2457600060019250925050611f2b565b9150600090505b94509492505050565b6000816004811115611f4857611f48612909565b03611f505750565b6001816004811115611f6457611f64612909565b03611fb15760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016106d7565b6002816004811115611fc557611fc5612909565b036120125760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106d7565b600381600481111561202657612026612909565b0361207e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016106d7565b600481600481111561209257612092612909565b036106565760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016106d7565b600054610100900460ff166121115760405162461bcd60e51b81526004016106d79061289c565b610789336117cd565b600054610100900460ff166121415760405162461bcd60e51b81526004016106d79061289c565b603661214d8382612983565b506037611cdf8282612983565b600054610100900460ff166121815760405162461bcd60e51b81526004016106d79061289c565b815160209283012081519190920120606591909155606655565b6121a582826123e8565b6035546001600160e01b0310156122175760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b60648201526084016106d7565b61074f60ce6123dc83612263565b6001600160a01b03838116600090815260cc6020526040808220548584168352912054611cdf92918216911683611d0a565b6000610702828461285a565b8254600090819080156122ae578561227c60018361285a565b8154811061228c5761228c61286d565b60009182526020909120015464010000000090046001600160e01b03166122b1565b60005b6001600160e01b031692506122ca83858763ffffffff16565b9150600081118015612308575043866122e460018461285a565b815481106122f4576122f461286d565b60009182526020909120015463ffffffff16145b1561236857612316826124cf565b8661232260018461285a565b815481106123325761233261286d565b9060005260206000200160000160046101000a8154816001600160e01b0302191690836001600160e01b031602179055506123d3565b85604051806040016040528061237d43611764565b63ffffffff168152602001612391856124cf565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b50935093915050565b60006107028284612847565b6001600160a01b03821661243e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106d7565b80603560008282546124509190612847565b90915550506001600160a01b0382166000908152603360205260408120805483929061247d908490612847565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361056f60008383611ce4565b60006001600160e01b038211156117c95760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b60648201526084016106d7565b80356001600160a01b038116811461254f57600080fd5b919050565b6000806040838503121561256757600080fd5b61257083612538565b946020939093013593505050565b600060208083528351808285015260005b818110156125ab5785810183015185820160400152820161258f565b506000604082860101526040601f19601f8301168501019250505092915050565b6000602082840312156125de57600080fd5b61070282612538565b6000806000606084860312156125fc57600080fd5b61260584612538565b925061261360208501612538565b9150604084013590509250925092565b60006020828403121561263557600080fd5b5035919050565b60008060006040848603121561265157600080fd5b833567ffffffffffffffff8082111561266957600080fd5b818601915086601f83011261267d57600080fd5b81358181111561268c57600080fd5b8760208260061b85010111156126a157600080fd5b6020928301989097509590910135949350505050565b803560ff8116811461254f57600080fd5b60008060008060008060c087890312156126e157600080fd5b6126ea87612538565b95506020870135945060408701359350612706606088016126b7565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561273b57600080fd5b61274488612538565b965061275260208901612538565b9550604088013594506060880135935061276e608089016126b7565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561279d57600080fd5b6127a683612538565b91506127b460208401612538565b90509250929050565b600080604083850312156127d057600080fd5b6127d983612538565b9150602083013563ffffffff811681146127f257600080fd5b809150509250929050565b600181811c9082168061281157607f821691505b602082108103611c2557634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561061957610619612831565b8181038181111561061957610619612831565b634e487b7160e01b600052603260045260246000fd5b60006001820161289557612895612831565b5060010190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60008261290457634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b601f821115611cdf57600081815260208120601f850160051c8101602086101561295c5750805b601f850160051c820191505b8181101561297b57828155600101612968565b505050505050565b815167ffffffffffffffff81111561299d5761299d61291f565b6129b1816129ab84546127fd565b84612935565b602080601f8311600181146129e657600084156129ce5750858301515b600019600386901b1c1916600185901b17855561297b565b600085815260208120601f198616915b82811015612a15578886015182559484019460019091019084016129f6565b5085821015612a335787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea2646970667358221220cfc17cc526fee7249ae6cb48777b0417d1be7aa7a88ff9f6cf8e7df03b449eb864736f6c63430008100033"; + "0x608060405234801561001057600080fd5b50612a79806100206000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c8063715018a611610125578063a694fc3a116100ad578063dd62ed3e1161007c578063dd62ed3e146104b8578063eb36854e146104cb578063f1127ed8146104de578063f2fde38b1461051b578063fe4b84df1461052e57600080fd5b8063a694fc3a1461046c578063a9059cbb1461047f578063c3cda52014610492578063d505accf146104a557600080fd5b80638da5cb5b116100f45780638da5cb5b1461041a5780638e539e8c1461042b57806395d89b411461043e5780639ab24eb014610446578063a457c2d71461045957600080fd5b8063715018a6146103d95780637cb569de146103e15780637ecebe00146103f457806384144dcf1461040757600080fd5b80633644e515116101a8578063587cde1e11610177578063587cde1e1461031e5780635c19a95c146103625780636c8848c2146103755780636fcfff451461038857806370a08231146103b057600080fd5b80633644e515146102dd57806339509351146102e55780633a46b1a8146102f8578063426233601461030b57600080fd5b806323b62302116101e457806323b623021461027e57806323b872dd146102a85780632e17de78146102bb578063313ce567146102ce57600080fd5b806302fb4d851461021657806306fdde031461022b578063095ea7b31461024957806318160ddd1461026c575b600080fd5b610229610224366004612554565b610541565b005b610233610573565b604051610240919061257e565b60405180910390f35b61025c610257366004612554565b610605565b6040519015158152602001610240565b6035545b604051908152602001610240565b61027061028c3660046125cc565b6001600160a01b03166000908152610130602052604090205490565b61025c6102b63660046125e7565b61061f565b6102296102c9366004612623565b610643565b60405160128152602001610240565b610270610659565b61025c6102f3366004612554565b610668565b610270610306366004612554565b61068a565b6102706103193660046125cc565b610709565b61034a61032c3660046125cc565b6001600160a01b03908116600090815260cc60205260409020541690565b6040516001600160a01b039091168152602001610240565b6102296103703660046125cc565b610728565b61022961038336600461263c565b610732565b61039b6103963660046125cc565b610755565b60405163ffffffff9091168152602001610240565b6102706103be3660046125cc565b6001600160a01b031660009081526033602052604090205490565b610229610777565b6102296103ef366004612554565b61078b565b6102706104023660046125cc565b61086c565b61022961041536600461263c565b61088a565b60fe546001600160a01b031661034a565b610270610439366004612623565b6108b7565b610233610913565b6102706104543660046125cc565b610922565b61025c610467366004612554565b61094f565b61022961047a366004612623565b6109ca565b61025c61048d366004612554565b6109d9565b6102296104a03660046126c8565b6109e7565b6102296104b3366004612720565b610b1d565b6102706104c636600461278a565b610c81565b6102296104d9366004612623565b610cac565b6104f16104ec3660046127bd565b610d6a565b60408051825163ffffffff1681526020928301516001600160e01b03169281019290925201610240565b6102296105293660046125cc565b610dee565b61022961053c366004612623565b610e64565b610549610ff3565b610553828261078b565b61056f3061056960fe546001600160a01b031690565b8361104d565b5050565b606060368054610582906127fd565b80601f01602080910402602001604051908101604052809291908181526020018280546105ae906127fd565b80156105fb5780601f106105d0576101008083540402835291602001916105fb565b820191906000526020600020905b8154815290600101906020018083116105de57829003601f168201915b5050505050905090565b600033610613818585611221565b60019150505b92915050565b60003361062d858285611345565b61063885858561104d565b506001949350505050565b61064c81610cac565b6106563033610569565b50565b60006106636113b9565b905090565b60003361061381858561067b8383610c81565b6106859190612847565b611221565b60004382106106e05760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e65640060448201526064015b60405180910390fd5b6001600160a01b038316600090815260cd602052604090206107029083611434565b9392505050565b6001600160a01b03811660009081526101306020526040812054610619565b61065633826114f1565b61073a610ff3565b61074583838361156b565b61074f30826109d9565b50505050565b6001600160a01b038116600090815260cd602052604081205461061990611764565b61077f610ff3565b61078960006117cd565b565b610793610ff3565b6001600160a01b038216600090815261013060205260409020548111156107fc5760405162461bcd60e51b815260206004820152601760248201527f5f736c6173683a20657863656564732062616c616e636500000000000000000060448201526064016106d7565b6001600160a01b038216600090815261013060205260408120805483929061082590849061285a565b90915550506040518181526001600160a01b038316907f4ed05e9673c26d2ed44f7ef6a7f2942df0ee3b5e1e17db4b99f9dcd261a339cd9060200160405180910390a25050565b6001600160a01b038116600090815260996020526040812054610619565b610892610ff3565b600061089f84848461181f565b905061074f3061056960fe546001600160a01b031690565b60004382106109085760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e65640060448201526064016106d7565b61061960ce83611434565b606060378054610582906127fd565b6001600160a01b0381166000908152610130602052604081205461094583611a68565b6106199190612847565b6000338161095d8286610c81565b9050838110156109bd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106d7565b6106388286868403611221565b6109d381611aef565b61056f30825b60003361061381858561104d565b83421115610a375760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e6174757265206578706972656400000060448201526064016106d7565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610ab190610aa99060a00160405160208183030381529060405280519060200120611b8d565b858585611bdb565b9050610abc81611c03565b8614610b0a5760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e63650000000000000060448201526064016106d7565b610b1481886114f1565b50505050505050565b83421115610b6d5760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016106d7565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610b9c8c611c03565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610bf782611b8d565b90506000610c0782878787611bdb565b9050896001600160a01b0316816001600160a01b031614610c6a5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016106d7565b610c758a8a8a611221565b50505050505050505050565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b3360009081526101306020526040902054811115610d0c5760405162461bcd60e51b815260206004820152601960248201527f5f756e7374616b653a20657863656564732062616c616e63650000000000000060448201526064016106d7565b336000908152610130602052604081208054839290610d2c90849061285a565b909155505060405181815233907f79d3df6837cc49ff0e09fd3258e6e45594e0703445bb06825e9d75156eaee8f0906020015b60405180910390a250565b60408051808201909152600080825260208201526001600160a01b038316600090815260cd60205260409020805463ffffffff8416908110610dae57610dae61286d565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b610df6610ff3565b6001600160a01b038116610e5b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106d7565b610656816117cd565b600054610100900460ff1615808015610e845750600054600160ff909116105b80610e9e5750303b158015610e9e575060005460ff166001145b610f015760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106d7565b6000805460ff191660011790558015610f24576000805461ff0019166101001790555b610f2c611c2b565b610f746040518060400160405280600b81526020016a23b7b63232b72a37b5b2b760a91b8152506040518060400160405280600381526020016211d31160ea1b815250611c5a565b610fa06040518060400160405280600b81526020016a23b7b63232b72a37b5b2b760a91b815250611c8b565b610faa3383611cd5565b801561056f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b60fe546001600160a01b031633146107895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106d7565b6001600160a01b0383166110b15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106d7565b6001600160a01b0382166111135760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106d7565b6001600160a01b0383166000908152603360205260409020548181101561118b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106d7565b6001600160a01b038085166000908152603360205260408082208585039055918516815290812080548492906111c2908490612847565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161120e91815260200190565b60405180910390a361074f848484611ce4565b6001600160a01b0383166112835760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106d7565b6001600160a01b0382166112e45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106d7565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006113518484610c81565b9050600019811461074f57818110156113ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106d7565b61074f8484848403611221565b60006106637f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6113e860655490565b6066546040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b8154600090815b8181101561149857600061144f8284611cef565b9050848682815481106114645761146461286d565b60009182526020909120015463ffffffff16111561148457809250611492565b61148f816001612847565b91505b5061143b565b81156114dc57846114aa60018461285a565b815481106114ba576114ba61286d565b60009182526020909120015464010000000090046001600160e01b03166114df565b60005b6001600160e01b031695945050505050565b6001600160a01b03828116600081815260cc6020818152604080842080546033845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461074f828483611d0a565b611573610ff3565b816115b45760405162461bcd60e51b815260206004820152601160248201527062756c6b5374616b65203020757365727360781b60448201526064016106d7565b600081116116045760405162461bcd60e51b815260206004820152601760248201527f62756c6b5374616b65203020746f74616c416d6f756e7400000000000000000060448201526064016106d7565b6000805b8381101561171c5760008585838181106116245761162461286d565b9050604002016020013590508061013060008888868181106116485761164861286d565b61165e92602060409092020190810191506125cc565b6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461168d9190612847565b9091555061169d90508184612847565b92508585838181106116b1576116b161286d565b6116c792602060409092020190810191506125cc565b6001600160a01b03167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d8260405161170191815260200190565b60405180910390a2508061171481612883565b915050611608565b5081811461074f5760405162461bcd60e51b81526020600482015260156024820152741a5b98dbdc9c9958dd081d1bdd185b105b5bdd5b9d605a1b60448201526064016106d7565b600063ffffffff8211156117c95760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b60648201526084016106d7565b5090565b60fe80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000611829610ff3565b8261186b5760405162461bcd60e51b81526020600482015260126024820152715f62756c6b536c617368203020757365727360701b60448201526064016106d7565b600082116118bb5760405162461bcd60e51b815260206004820152601860248201527f5f62756c6b536c617368203020746f74616c416d6f756e74000000000000000060448201526064016106d7565b60008060005b85811015611a175760008787838181106118dd576118dd61286d565b905060400201602001359050600061013060008a8a868181106119025761190261286d565b61191892602060409092020190810191506125cc565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050600081831161194a578261194c565b815b905061197f8a8a868181106119635761196361286d565b61197992602060409092020190810191506125cc565b8261078b565b6119898387612847565b95506119958186612847565b94508989858181106119a9576119a961286d565b6119bf92602060409092020190810191506125cc565b6001600160a01b03167f4ed05e9673c26d2ed44f7ef6a7f2942df0ee3b5e1e17db4b99f9dcd261a339cd826040516119f991815260200190565b60405180910390a25050508080611a0f90612883565b9150506118c1565b50838214611a5f5760405162461bcd60e51b81526020600482015260156024820152741a5b98dbdc9c9958dd081d1bdd185b105b5bdd5b9d605a1b60448201526064016106d7565b95945050505050565b6001600160a01b038116600090815260cd60205260408120548015611adc576001600160a01b038316600090815260cd60205260409020611aaa60018361285a565b81548110611aba57611aba61286d565b60009182526020909120015464010000000090046001600160e01b0316611adf565b60005b6001600160e01b03169392505050565b60008111611b365760405162461bcd60e51b815260206004820152601460248201527343616e6e6f74207374616b65206e6f7468696e6760601b60448201526064016106d7565b336000908152610130602052604081208054839290611b56908490612847565b909155505060405181815233907f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d90602001610d5f565b6000610619611b9a6113b9565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000611bec87878787611e47565b91509150611bf981611f34565b5095945050505050565b6001600160a01b03811660009081526099602052604090208054600181018255905b50919050565b600054610100900460ff16611c525760405162461bcd60e51b81526004016106d79061289c565b6107896120ea565b600054610100900460ff16611c815760405162461bcd60e51b81526004016106d79061289c565b61056f828261211a565b600054610100900460ff16611cb25760405162461bcd60e51b81526004016106d79061289c565b61065681604051806040016040528060018152602001603160f81b81525061215a565b61056f828261219b565b505050565b611cdf838383612225565b6000611cfe60028484186128e7565b61070290848416612847565b816001600160a01b0316836001600160a01b031614158015611d2c5750600081115b15611cdf576001600160a01b03831615611dba576001600160a01b038316600090815260cd602052604081208190611d679061225785612263565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611daf929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615611cdf576001600160a01b038216600090815260cd602052604081208190611df0906123dc85612263565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611e38929190918252602082015260400190565b60405180910390a25050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611e7e5750600090506003611f2b565b8460ff16601b14158015611e9657508460ff16601c14155b15611ea75750600090506004611f2b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611efb573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611f2457600060019250925050611f2b565b9150600090505b94509492505050565b6000816004811115611f4857611f48612909565b03611f505750565b6001816004811115611f6457611f64612909565b03611fb15760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016106d7565b6002816004811115611fc557611fc5612909565b036120125760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106d7565b600381600481111561202657612026612909565b0361207e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016106d7565b600481600481111561209257612092612909565b036106565760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016106d7565b600054610100900460ff166121115760405162461bcd60e51b81526004016106d79061289c565b610789336117cd565b600054610100900460ff166121415760405162461bcd60e51b81526004016106d79061289c565b603661214d8382612983565b506037611cdf8282612983565b600054610100900460ff166121815760405162461bcd60e51b81526004016106d79061289c565b815160209283012081519190920120606591909155606655565b6121a582826123e8565b6035546001600160e01b0310156122175760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b60648201526084016106d7565b61074f60ce6123dc83612263565b6001600160a01b03838116600090815260cc6020526040808220548584168352912054611cdf92918216911683611d0a565b6000610702828461285a565b8254600090819080156122ae578561227c60018361285a565b8154811061228c5761228c61286d565b60009182526020909120015464010000000090046001600160e01b03166122b1565b60005b6001600160e01b031692506122ca83858763ffffffff16565b9150600081118015612308575043866122e460018461285a565b815481106122f4576122f461286d565b60009182526020909120015463ffffffff16145b1561236857612316826124cf565b8661232260018461285a565b815481106123325761233261286d565b9060005260206000200160000160046101000a8154816001600160e01b0302191690836001600160e01b031602179055506123d3565b85604051806040016040528061237d43611764565b63ffffffff168152602001612391856124cf565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b50935093915050565b60006107028284612847565b6001600160a01b03821661243e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106d7565b80603560008282546124509190612847565b90915550506001600160a01b0382166000908152603360205260408120805483929061247d908490612847565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361056f60008383611ce4565b60006001600160e01b038211156117c95760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b60648201526084016106d7565b80356001600160a01b038116811461254f57600080fd5b919050565b6000806040838503121561256757600080fd5b61257083612538565b946020939093013593505050565b600060208083528351808285015260005b818110156125ab5785810183015185820160400152820161258f565b506000604082860101526040601f19601f8301168501019250505092915050565b6000602082840312156125de57600080fd5b61070282612538565b6000806000606084860312156125fc57600080fd5b61260584612538565b925061261360208501612538565b9150604084013590509250925092565b60006020828403121561263557600080fd5b5035919050565b60008060006040848603121561265157600080fd5b833567ffffffffffffffff8082111561266957600080fd5b818601915086601f83011261267d57600080fd5b81358181111561268c57600080fd5b8760208260061b85010111156126a157600080fd5b6020928301989097509590910135949350505050565b803560ff8116811461254f57600080fd5b60008060008060008060c087890312156126e157600080fd5b6126ea87612538565b95506020870135945060408701359350612706606088016126b7565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561273b57600080fd5b61274488612538565b965061275260208901612538565b9550604088013594506060880135935061276e608089016126b7565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561279d57600080fd5b6127a683612538565b91506127b460208401612538565b90509250929050565b600080604083850312156127d057600080fd5b6127d983612538565b9150602083013563ffffffff811681146127f257600080fd5b809150509250929050565b600181811c9082168061281157607f821691505b602082108103611c2557634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561061957610619612831565b8181038181111561061957610619612831565b634e487b7160e01b600052603260045260246000fd5b60006001820161289557612895612831565b5060010190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60008261290457634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b601f821115611cdf57600081815260208120601f850160051c8101602086101561295c5750805b601f850160051c820191505b8181101561297b57828155600101612968565b505050505050565b815167ffffffffffffffff81111561299d5761299d61291f565b6129b1816129ab84546127fd565b84612935565b602080601f8311600181146129e657600084156129ce5750858301515b600019600386901b1c1916600185901b17855561297b565b600085815260208120601f198616915b82811015612a15578886015182559484019460019091019084016129f6565b5085821015612a335787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea2646970667358221220e31f59f775c1cd997c9de9a8934457069590316cca710450d25d4aefc2f235be64736f6c63430008100033"; type GoldenTokenConstructorParams = | [signer?: Signer] From 1fcd62a2fc1b77ccfe38b807cf7ac715ae7e7383 Mon Sep 17 00:00:00 2001 From: Dave Hrdlicka Date: Tue, 25 Oct 2022 15:38:01 +0200 Subject: [PATCH 8/8] Next steps TODOs --- contracts/GoldenBounty.sol | 5 +++++ test/GoldenBounty.ts | 2 ++ 2 files changed, 7 insertions(+) diff --git a/contracts/GoldenBounty.sol b/contracts/GoldenBounty.sol index 7a2b8f45..a493a751 100644 --- a/contracts/GoldenBounty.sol +++ b/contracts/GoldenBounty.sol @@ -28,6 +28,11 @@ contract GoldenBounty is Ownable { minimumVotes = _minimumVotes; } + // TODO: Figure out something more appropriate for a decentralized bounty contract treasury. + function withdraw(uint256 amount) public onlyOwner { + tokenContract.transfer(msg.sender, amount); + } + function createQuestion( bytes16 subjectUUID, bytes16 predicateUUID, diff --git a/test/GoldenBounty.ts b/test/GoldenBounty.ts index de4e49f5..2dfeaa94 100644 --- a/test/GoldenBounty.ts +++ b/test/GoldenBounty.ts @@ -202,6 +202,8 @@ describe('GoldenBounty', function () { contractBalanceBefore.add(bounty.div(10)) ); }); + + // TODO: Test multiple answers and voters }); }); });