Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nethereum C#自动乙醚转移_C#_Ethereum - Fatal编程技术网

Nethereum C#自动乙醚转移

Nethereum C#自动乙醚转移,c#,ethereum,C#,Ethereum,我希望能够自动将乙醚转移到人员列表中。 假设列表是csv格式的。 我写了一些代码来自动化这个过程 class Program { int nonce = 0; static void Main(string[] args) { var account = SetupAccount(); var recipients = ReadCsv(); var web3Init = GetConnection(); n

我希望能够自动将乙醚转移到人员列表中。 假设列表是csv格式的。 我写了一些代码来自动化这个过程

 class Program
{
    int nonce = 0;
    static void Main(string[] args)
    {
        var account = SetupAccount();
        var recipients = ReadCsv();
        var web3Init = GetConnection();
        nonce = web3.Eth.Transactions.GetTransactionCount.SendRequestAsync(account.Address).Result;
        //var recipients = new List<Records>() { new Records() { Value = 10000000000000000, Address = "0x5CC494843e3f4AC175A5e730c300b011FAbF2cEa" } };
        foreach (var recipient in recipients)
        {
            try
            {
                var web3 = GetConnection();
                var receipt = SendEther(account, recipient, web3).Result;
            }
            catch (System.Exception)
            {
                MessageBox.Show("Failed");                                        
            }
            Thread.Sleep(30000);
        }
    }

    private static async Task<TransactionReceipt> SendEther(Account account, Records recipient, Web3 web3)
    {
        var transactionPolling = web3.TransactionManager.TransactionReceiptService;

        //var currentBalance = await web3.Eth.GetBalance.SendRequestAsync(account.Address);

        //assumed client is mining already
        //when sending a transaction using an Account, a raw transaction is signed and send using the private key
        return await transactionPolling.SendRequestAndWaitForReceiptAsync(() =>
        {
            var transactionInput = new TransactionInput
            {
                From = account.Address,
                //Gas = new HexBigInteger(25000),
                GasPrice = new HexBigInteger(10 ^ 10),
                To = recipient.Address,
                Value = new HexBigInteger(new BigInteger(recipient.Value)),
                Nonce = nonce
            };
            var txSigned = new Nethereum.Signer.TransactionSigner();
            var signedTx = txSigned.SignTransaction(account.PrivateKey, transactionInput.To, transactionInput.Value, transactionInput.Nonce);
            var transaction = new Nethereum.RPC.Eth.Transactions.EthSendRawTransaction(web3.Client);
            nonce++;
            return transaction.SendRequestAsync(signedTx);
        });
    }

    private static Web3 GetConnection()
    {
        return new Web3("https://mainnet.infura.io");
    }

    private static Account SetupAccount()
    {
        var password = "@Password";
        var accountFilePath = @"filePath";
        return Account.LoadFromKeyStoreFile(accountFilePath, password);
    }

    private static List<Records> ReadCsv()
    {
        string filePath = @"C:\Users\Potti\source\repos\ConversionFiles\XrcfRecipients.csv";
        if (File.Exists(filePath))
        {
            using (StreamReader stream = new StreamReader(filePath))
            {
                CsvReader reader = new CsvReader(stream, new Configuration
                {
                    TrimOptions = TrimOptions.Trim,
                    HasHeaderRecord = true,
                    HeaderValidated = null
                });
                reader.Configuration.RegisterClassMap<RecordMapper>();

                return reader.GetRecords<Records>().ToList();
            }
        }
        else
        {
            return null;
        }
    }
}

class Records
{
    public string Address { get; set; }

    public decimal Value { get; set; }
}

sealed class RecordMapper : ClassMap<Records>
{
    public RecordMapper()
    {
        Map(x => x.Address).Name("Address");
        Map(x => x.Value).Name("Value");
    }
}
类程序
{
int nonce=0;
静态void Main(字符串[]参数)
{
var account=SetupAccount();
var recipients=ReadCsv();
var web3Init=GetConnection();
nonce=web3.Eth.Transactions.GetTransactionCount.SendRequestAsync(account.Address).Result;
//var recipients=new List(){new Records(){Value=1000000000000000,Address=“0x5CC494843e3f4AC175A5e730c300b011FAbF2cEa”};
foreach(收件人中的var收件人)
{
尝试
{
var web3=GetConnection();
var收据=发送台(账户、收件人、web3)。结果;
}
捕获(系统异常)
{
MessageBox.Show(“失败”);
}
睡眠(30000);
}
}
专用静态异步任务SendEther(帐户、记录收件人、Web3 Web3)
{
var transactionPolling=web3.TransactionManager.TransactionReceiptService;
//var currentBalance=wait web3.Eth.GetBalance.SendRequestAsync(account.Address);
//假定客户端已经在挖掘
//使用帐户发送事务时,原始事务将使用私钥进行签名和发送
return wait transactionPolling.SendRequestAndWaitForReceiptAsync(()=>
{
var TransactionPut=新TransactionPut
{
From=帐户地址,
//气体=新的十六进制整数(25000),
GasPrice=新的十六进制整数(10^10),
收件人=收件人地址,
Value=new-HexBigInteger(new-BigInteger(recipient.Value)),
Nonce=Nonce
};
var txSigned=new Nethereum.Signer.TransactionSigner();
var signedTx=txSigned.SignTransaction(account.PrivateKey、transactionput.To、transactionput.Value、transactionput.Nonce);
var transaction=new Nethereum.RPC.Eth.Transactions.EthSendRawTransaction(web3.Client);
nonce++;
返回事务。SendRequestAsync(signedTx);
});
}
私有静态Web3 GetConnection()
{
返回新的Web3(“https://mainnet.infura.io");
}
私人静态帐户SetupAccount()
{
var password=“@password”;
var accountFilePath=@“filePath”;
返回Account.loadFromKeyStore(accountFilePath,密码);
}
私有静态列表ReadCsv()
{
字符串文件路径=@“C:\Users\Potti\source\repos\ConversionFiles\XrcfRecipients.csv”;
if(File.Exists(filePath))
{
使用(StreamReader stream=新StreamReader(文件路径))
{
CsvReader reader=新CsvReader(流,新配置
{
TrimOptions=TrimOptions.Trim,
HasHeaderRecord=true,
HeaderValidated=null
});
reader.Configuration.RegisterClassMap();
返回reader.GetRecords().ToList();
}
}
其他的
{
返回null;
}
}
}
课堂记录
{
公共字符串地址{get;set;}
公共十进制值{get;set;}
}
密封类记录映射器:类映射
{
公共记录映射器()
{
映射(x=>x.Address)。名称(“地址”);
映射(x=>x.Value).Name(“Value”);
}
}
如何修改流程以一次执行所有事务,而不是等待每个事务完成?(火与遗忘)
此外,执行此操作是否有任何安全考虑?

您当前正在等待挖掘每个事务。您可以执行以下操作:

var account = new Account("privateKey"); // or load it from your keystore file as you are doing.
var web3 = new Web3(account, "https://mainnet.infura.io");
首先使用相同的Account对象创建一个web3实例,因为我们使用的是一个带有私钥的帐户,Nethereum将在发送事务之前对其进行脱机签名

现在使用TransactionManager,您可以为每个接收者发送一个事务

var transactionHashes = new List<string>();
foreach(var recepient in recepients){

            var transactionInput = new TransactionInput
            {
                From = account.Address,
                GasPrice = Web3.Convert.ToWei(1.5, UnitConversion.EthUnit.Gwei);,
                To = recipient.Address,
                Value = new HexBigInteger(new BigInteger(recipient.Value)),
            };
     var transactionHash = web3.Eth.TransactionManager.SendTransactionAsync(transactionInput);
     transanctionHashes.Add(transactionHash);
}

您当前正在做的是等待挖掘每个事务。您可以执行以下操作:

var account = new Account("privateKey"); // or load it from your keystore file as you are doing.
var web3 = new Web3(account, "https://mainnet.infura.io");
首先使用相同的Account对象创建一个web3实例,因为我们使用的是一个带有私钥的帐户,Nethereum将在发送事务之前对其进行脱机签名

现在使用TransactionManager,您可以为每个接收者发送一个事务

var transactionHashes = new List<string>();
foreach(var recepient in recepients){

            var transactionInput = new TransactionInput
            {
                From = account.Address,
                GasPrice = Web3.Convert.ToWei(1.5, UnitConversion.EthUnit.Gwei);,
                To = recipient.Address,
                Value = new HexBigInteger(new BigInteger(recipient.Value)),
            };
     var transactionHash = web3.Eth.TransactionManager.SendTransactionAsync(transactionInput);
     transanctionHashes.Add(transactionHash);
}