예제 #1
0
        public async Task TerminateTest()
        {
            EthNetwork.UseDefaultTestNet();

            var prefundedAccount = new Account(EthNetwork.Instance.PrefundedPrivateKey);

            var tokenOwnerAccount = EthAccountFactory.Create();
            var coreTeamAccount   = EthAccountFactory.Create();

            await EthNetwork.Instance.RefillAsync(tokenOwnerAccount);

            await EthNetwork.Instance.RefillAsync(coreTeamAccount);

            // Create the ERC20 token...
            var token = new AlgoTokenV1(EthNetwork.Instance.GetWeb3(tokenOwnerAccount), EthNetwork.Instance.GasPriceProvider);
            await token.DeployAsync();

            // Store the current balance of the token owner...
            var tokenOwnerAccountBalance = await token.BalanceOfAsync(tokenOwnerAccount.Address);

            // Create a fees...
            var fees1 = new AlgoFees(EthNetwork.Instance.GetWeb3(coreTeamAccount), EthNetwork.Instance.GasPriceProvider);
            await fees1.DeployAsync(token.ContractAddress);

            // Transfer some tokens to the fees...
            await token.TransferAsync(fees1.ContractAddress, 100.Algo());

            // Ensure the receiver got the tokens...
            Assert.Equal(100.Algo(), await token.BalanceOfAsync(fees1.ContractAddress));

            // Terminate the contract.
            await fees1.TerminateAsync();

            // Ensure the contract returned all the tokens...
            Assert.Equal(0, await token.BalanceOfAsync(fees1.ContractAddress));
            Assert.Equal(100.Algo(), await token.BalanceOfAsync(coreTeamAccount.Address));
        }
예제 #2
0
        public async Task MinerRegistrationTest()
        {
            EthNetwork.UseDefaultTestNet();

            var prefundedAccount = new Account(EthNetwork.Instance.PrefundedPrivateKey);

            var tokenOwnerAccount = EthAccountFactory.Create();
            var coreTeamAccount   = EthAccountFactory.Create();

            await EthNetwork.Instance.RefillAsync(tokenOwnerAccount);

            await EthNetwork.Instance.RefillAsync(coreTeamAccount);

            // Create the ERC20 token...
            var token = new AlgoTokenV1(EthNetwork.Instance.GetWeb3(tokenOwnerAccount), EthNetwork.Instance.GasPriceProvider);
            await token.DeployAsync();

            // Create a fees...
            var fees1 = new AlgoFees(EthNetwork.Instance.GetWeb3(coreTeamAccount), EthNetwork.Instance.GasPriceProvider);
            await fees1.DeployAsync(token.ContractAddress);

            // Create some miners...
            var minerAccounts    = new IAccount[3];
            var referralAccounts = new IAccount[3];

            AlgoMiner[] miners = new AlgoMiner[3];

            for (int i = 0; i < 3; i++)
            {
                // Create an account for the miner and the referral...
                minerAccounts[i]    = EthAccountFactory.Create();
                referralAccounts[i] = EthAccountFactory.Create();

                // Create the miner...
                miners[i] = new AlgoMiner(EthNetwork.Instance.GetWeb3(coreTeamAccount), EthNetwork.Instance.GasPriceProvider);
                await miners[i].DeployAsync(0, 2, minerAccounts[i].Address, referralAccounts[i].Address, token.ContractAddress);
            }

            // Register a miner...
            await fees1.RegisterMinerAsync(miners[0].ContractAddress);

            Assert.Equal(1, await fees1.GetMinerCountAsync());
            Assert.Equal(miners[0].ContractAddress, await fees1.GetMinerByIndexAsync(0));

            // Remove the only registered miner.
            await fees1.UnregisterMinerAsync(miners[0].ContractAddress);

            Assert.Equal(0, await fees1.GetMinerCountAsync());

            // Register the 3 miners and ensure they are registered...
            for (int i = 0; i < 3; i++)
            {
                await fees1.RegisterMinerAsync(miners[i].ContractAddress);
            }

            Assert.Equal(3, await fees1.GetMinerCountAsync());

            for (int i = 0; i < 3; i++)
            {
                Assert.Equal(miners[i].ContractAddress, await fees1.GetMinerByIndexAsync(i));
            }

            // Remove the 2nd miner and check...
            await fees1.UnregisterMinerAsync(miners[1].ContractAddress);

            Assert.Equal(2, await fees1.GetMinerCountAsync());
            Assert.Equal(miners[0].ContractAddress, await fees1.GetMinerByIndexAsync(0));
            Assert.Equal(miners[2].ContractAddress, await fees1.GetMinerByIndexAsync(1));

            // Add the removed miner back...
            await fees1.RegisterMinerAsync(miners[1].ContractAddress);

            Assert.Equal(3, await fees1.GetMinerCountAsync());
            Assert.Equal(miners[0].ContractAddress, await fees1.GetMinerByIndexAsync(0));
            Assert.Equal(miners[2].ContractAddress, await fees1.GetMinerByIndexAsync(1));
            Assert.Equal(miners[1].ContractAddress, await fees1.GetMinerByIndexAsync(2));

            // Remove the latest miner...
            await fees1.UnregisterMinerAsync(miners[1].ContractAddress);

            Assert.Equal(2, await fees1.GetMinerCountAsync());
            Assert.Equal(miners[0].ContractAddress, await fees1.GetMinerByIndexAsync(0));
            Assert.Equal(miners[2].ContractAddress, await fees1.GetMinerByIndexAsync(1));
        }
예제 #3
0
        public async Task MineTest()
        {
            EthNetwork.UseDefaultTestNet();

            var prefundedAccount = new Account(EthNetwork.Instance.PrefundedPrivateKey);

            var tokenOwnerAccount = EthAccountFactory.Create();
            var systemAccount     = EthAccountFactory.Create();
            var coreTeamAccount   = EthAccountFactory.Create();

            await EthNetwork.Instance.RefillAsync(tokenOwnerAccount);

            await EthNetwork.Instance.RefillAsync(systemAccount);

            await EthNetwork.Instance.RefillAsync(coreTeamAccount);

            // Create the ERC20 token...
            var token = new AlgoTokenV1(EthNetwork.Instance.GetWeb3(tokenOwnerAccount), EthNetwork.Instance.GasPriceProvider);
            await token.DeployAsync();

            // Create a fees...
            var fees1 = new AlgoFees(EthNetwork.Instance.GetWeb3(coreTeamAccount), EthNetwork.Instance.GasPriceProvider);
            await fees1.DeployAsync(token.ContractAddress);

            // Register the system account...
            await fees1.AddSystemAsync(systemAccount.Address);

            // Transfer some tokens to the fees...
            await token.TransferAsync(fees1.ContractAddress, 151.Algo());

            // Create one miner per category...
            var minerAccounts    = new IAccount[6];
            var referralAccounts = new IAccount[6];
            var miners           = new AlgoMiner[6];

            for (byte i = 0; i <= 5; i++)
            {
                // Create an account for the miner and the referral...
                minerAccounts[i]    = EthAccountFactory.Create();
                referralAccounts[i] = EthAccountFactory.Create();
                await EthNetwork.Instance.RefillAsync(minerAccounts[i]);

                // Create the miner as "NonPoolBased" so it can be activated...
                miners[i] = new AlgoMiner(EthNetwork.Instance.GetWeb3(coreTeamAccount), EthNetwork.Instance.GasPriceProvider);
                await miners[i].DeployAsync(1, i, minerAccounts[i].Address, referralAccounts[i].Address, token.ContractAddress);

                // Activate the miner...
                await miners[i].ActivateMinerAsync();

                // Start mining...
                {
                    var miner = new AlgoMiner(miners[i].ContractAddress, EthNetwork.Instance.GetWeb3(minerAccounts[i]), EthNetwork.Instance.GasPriceProvider);
                    await miner.StartMiningAsync();
                }

                // Register a miner...
                await fees1.RegisterMinerAsync(miners[i].ContractAddress);
            }

            // Mine the fees...
            {
                var fees = new AlgoFees(fees1.ContractAddress, EthNetwork.Instance.GetWeb3(systemAccount), EthNetwork.Instance.GasPriceProvider);
                await fees.MineAsync();
            }

            // Ensure the miners received the payment from the fees...
            var balance0 = await token.BalanceOfAsync(minerAccounts[0].Address);

            var balance1 = await token.BalanceOfAsync(minerAccounts[1].Address);

            var balance2 = await token.BalanceOfAsync(minerAccounts[2].Address);

            var balance3 = await token.BalanceOfAsync(minerAccounts[3].Address);

            var balance4 = await token.BalanceOfAsync(minerAccounts[4].Address);

            var balance5 = await token.BalanceOfAsync(minerAccounts[5].Address);

            Assert.Equal(1.Algo(), balance0);
            Assert.Equal(10.Algo(), balance1);
            Assert.Equal(20.Algo(), balance2);
            Assert.Equal(30.Algo(), balance3);
            Assert.Equal(40.Algo(), balance4);
            Assert.Equal(50.Algo(), balance5);
        }
예제 #4
0
        protected override async Task <TransactionReceipt> ExecuteAsync(RuntimeContext context, string contractAddress, Web3 web3)
        {
            var algoFees = new AlgoFees(contractAddress, web3, context.GasPriceProvider);

            return(await algoFees.TerminateAsync());
        }
        protected override async Task <TransactionReceipt> DeployContractAsync(RuntimeContext context, Web3 web3)
        {
            var algoFees = new AlgoFees(web3, context.GasPriceProvider);

            return(await algoFees.DeployAsync(context.ResolveContractReference(TokenAddress)));
        }
        protected override async Task <TransactionReceipt> ExecuteAsync(RuntimeContext context, string contractAddress, Web3 web3)
        {
            var algoFees = new AlgoFees(contractAddress, web3, context.GasPriceProvider);

            return(await algoFees.UnregisterMinerAsync(context.ResolveContractReference(MinerAddress)));
        }