Beispiel #1
0
def test_PublisherStrategy():
    pub_ss = PublisherStrategy(
        DT_init=1.1,
        DT_stake=2.2,
        pool_weight_DT=3.3,
        pool_weight_OCEAN=4.4,
        s_between_create=50,
        s_between_unstake=60,
        s_between_sellDT=70,
        is_malicious=True,
        s_wait_to_rug=80,
        s_rug_time=90,
    )

    assert pub_ss.DT_init == 1.1
    assert pub_ss.DT_stake == 2.2
    assert pub_ss.pool_weight_DT == 3.3
    assert pub_ss.pool_weight_OCEAN == 4.4
    assert pub_ss.s_between_create == 50
    assert pub_ss.s_between_unstake == 60
    assert pub_ss.s_between_sellDT == 70

    assert pub_ss.is_malicious
    assert pub_ss.s_wait_to_rug == 80
    assert pub_ss.s_rug_time == 90
Beispiel #2
0
def test_constructor():
    pub_ss = PublisherStrategy()
    agent = PublisherAgent("pub1", USD=1.0, OCEAN=2.0, pub_ss=pub_ss)
    assert agent.USD() == 1.0
    assert agent.OCEAN() == 2.0
    assert id(agent.pub_ss) == id(pub_ss)
    assert agent.pub_ss.s_between_create == pub_ss.s_between_create

    assert agent._s_since_create == 0
    assert agent._s_since_unstake == 0
    assert agent._s_since_sellDT == 0

    assert agent.pools == []
Beispiel #3
0
def test_createPoolAgent(is_malicious):
    state = MockState()
    assert len(state.agents) == 0

    pub_ss = PublisherStrategy(is_malicious=is_malicious)
    pub_agent = PublisherAgent(name="a", USD=0.0, OCEAN=1000.0, pub_ss=pub_ss)

    state.addAgent(pub_agent)
    assert len(state.agents) == 1
    assert len(state.agents.filterToPool()) == 0

    pool_agent = pub_agent._createPoolAgent(state)
    assert len(state.agents) == 2
    assert len(state.agents.filterToPool()) == 1
    pool_agent2 = state.agents[pool_agent.name]
    assert isinstance(pool_agent2, PoolAgent)
Beispiel #4
0
def test_unstakeOCEANsomewhere(is_malicious):
    state = MockState()

    pub_ss = PublisherStrategy(is_malicious=is_malicious)
    pub_agent = PublisherAgent(name="a", USD=0.0, OCEAN=1000.0, pub_ss=pub_ss)

    state.addAgent(pub_agent)
    assert len(state.agents.filterByNonzeroStake(pub_agent)) == 0
    assert not pub_agent._doUnstakeOCEAN(state)

    pool_agent = pub_agent._createPoolAgent(state)
    assert len(state.agents.filterByNonzeroStake(pub_agent)) == 1
    assert not pub_agent._doUnstakeOCEAN(state)

    pub_agent._s_since_unstake += pub_agent.pub_ss.s_between_unstake  # force unstake
    pub_agent._s_since_create += pub_agent.pub_ss.s_wait_to_rug  # ""
    assert pub_agent._doUnstakeOCEAN(state)

    BPT_before = pub_agent.BPT(pool_agent.pool)
    pub_agent._unstakeOCEANsomewhere(state)
    BPT_after = pub_agent.BPT(pool_agent.pool)
    assert BPT_after == (1.0 - PERCENT_UNSTAKE) * BPT_before
Beispiel #5
0
def test_sellDTsomewhere(is_malicious):
    state = MockState()

    pub_ss = PublisherStrategy(is_malicious=is_malicious)
    pub_agent = PublisherAgent(name="a", USD=0.0, OCEAN=1000.0, pub_ss=pub_ss)

    state.addAgent(pub_agent)
    assert len(state.agents.filterByNonzeroStake(pub_agent)) == 0
    assert not pub_agent._doSellDT(state)

    pool_agent = pub_agent._createPoolAgent(state)
    assert len(pub_agent._DTsWithNonzeroBalance(state)) == 1
    assert not pub_agent._doSellDT(state)

    pub_agent._s_since_sellDT += pub_agent.pub_ss.s_between_sellDT  # force sell
    pub_agent._s_since_create += pub_agent.pub_ss.s_wait_to_rug  # ""
    assert pub_agent._doSellDT(state)

    DT_before = pub_agent.DT(pool_agent.datatoken)
    perc_sell = 0.01
    pub_agent._sellDTsomewhere(state, perc_sell=perc_sell)
    DT_after = pub_agent.DT(pool_agent.datatoken)
    assert DT_after == (1.0 - perc_sell) * DT_before
Beispiel #6
0
    def __init__(self, ss=None):
        # initialize self.tick, ss, agents, kpis
        super().__init__(ss)

        # now, fill in actual values for ss, agents, kpis
        if self.ss is None:
            self.ss = SimStrategy()
        ss = self.ss  # for convenience as we go forward

        # wire up the circuit
        new_agents: Set[AgentBase.AgentBase] = set()

        pub_ss = PublisherStrategy(
            DT_init=self.ss.publisher_DT_init,
            DT_stake=self.ss.publisher_DT_stake,
            pool_weight_DT=self.ss.publisher_pool_weight_DT,
            pool_weight_OCEAN=self.ss.publisher_pool_weight_OCEAN,
            s_between_create=self.ss.publisher_s_between_create,
            s_between_unstake=self.ss.publisher_s_between_unstake,
            s_between_sellDT=self.ss.publisher_s_between_sellDT,
            is_malicious=False,
        )
        new_agents.add(
            PublisherAgent(
                name="publisher",
                USD=0.0,
                OCEAN=self.ss.publisher_init_OCEAN,
                pub_ss=pub_ss,
            ))

        new_agents.add(
            DataconsumerAgent(
                name="consumer",
                USD=0.0,
                OCEAN=self.ss.consumer_init_OCEAN,
                s_between_buys=self.ss.consumer_s_between_buys,
                profit_margin_on_consume=self.ss.
                consumer_profit_margin_on_consume,
            ))

        new_agents.add(
            StakerspeculatorAgent(
                name="stakerSpeculator",
                USD=0.0,
                OCEAN=self.ss.staker_init_OCEAN,
                s_between_speculates=self.ss.staker_s_between_speculates,
            ))

        new_agents.add(
            SpeculatorAgent(
                name="speculator",
                USD=0.0,
                OCEAN=self.ss.speculator_init_OCEAN,
                s_between_speculates=self.ss.speculator_s_between_speculates,
            ))

        mal_pub_ss = PublisherStrategy(
            DT_init=self.ss.mal_DT_init,
            DT_stake=self.ss.mal_DT_stake,
            pool_weight_DT=self.ss.mal_pool_weight_DT,
            pool_weight_OCEAN=self.ss.mal_pool_weight_OCEAN,
            s_between_create=self.ss.mal_s_between_create,
            s_between_unstake=self.ss.mal_s_between_unstake,
            s_between_sellDT=self.ss.mal_s_between_sellDT,
            is_malicious=True,
            s_wait_to_rug=self.ss.mal_s_wait_to_rug,
            s_rug_time=self.ss.mal_s_rug_time,
        )
        new_agents.add(
            PublisherAgent(
                name="maliciousPublisher",
                USD=0.0,
                OCEAN=self.ss.mal_init_OCEAN,
                pub_ss=mal_pub_ss,
            ))

        for agent in new_agents:
            self.agents[agent.name] = agent

        # kpis is defined in this netlist module
        self.kpis = KPIs(self.ss.time_step)

        # pools that were rug-pulled by a malicious publisher. Some agents
        # watch for 'state.rugged_pools' and act accordingly.
        self.rugged_pools: List[str] = []
Beispiel #7
0
def test_doCreatePool(is_malicious):
    pub_ss = PublisherStrategy(is_malicious=is_malicious)
    agent = PublisherAgent(name="a", USD=0.0, OCEAN=1000.0, pub_ss=pub_ss)
    c = agent._doCreatePool()
    assert c in [False, True]