Skip to content

Instantly share code, notes, and snippets.

@MashB
Created February 9, 2017 09:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MashB/ae6f156b498bf32a48d205712749657d to your computer and use it in GitHub Desktop.
Save MashB/ae6f156b498bf32a48d205712749657d to your computer and use it in GitHub Desktop.
class Program
{
private const string senderAddress = "0x12890d2cce102216644c59daE5baed380d84830c";
private const string password = "password";
private const string abi = @"[{""constant"":false,""inputs"":[{""name"":""customerName"",""type"":""string""},{""name"":""mobileNumber"",""type"":""int256""},{""name"":""serviceProvider"",""type"":""string""}],""name"":""addCustomer"",""outputs"":[{""name"":"""",""type"":""bool""}],""payable"":false,""type"":""function""},{""constant"":true,""inputs"":[],""name"":""getAllCustomers"",""outputs"":[{""name"":""mobile"",""type"":""int256[]""},{""name"":""customerName"",""type"":""bytes32[]""},{""name"":""serviceProvider"",""type"":""bytes32[]""}],""payable"":false,""type"":""function""},{""constant"":false,""inputs"":[{""name"":""mobileNumber"",""type"":""int256""}],""name"":""getCustomersByMobileNumber"",""outputs"":[{""name"":""mobile"",""type"":""int256""},{""name"":""customerName"",""type"":""bytes32""},{""name"":""serviceProvider"",""type"":""bytes32""}],""payable"":false,""type"":""function""},{""constant"":false,""inputs"":[{""name"":""mobileNumber"",""type"":""int256""},{""name"":""fromProvider"",""type"":""string""},{""name"":""toProvider"",""type"":""string""},{""name"":""dateTime"",""type"":""string""}],""name"":""Port"",""outputs"":[{""name"":""result"",""type"":""bool""}],""payable"":false,""type"":""function""},{""inputs"":[],""type"":""constructor""},{""anonymous"":false,""inputs"":[{""indexed"":false,""name"":""sender"",""type"":""address""},{""indexed"":true,""name"":""mobileNumber"",""type"":""int256""},{""indexed"":false,""name"":""from"",""type"":""string""},{""indexed"":false,""name"":""to"",""type"":""string""},{""indexed"":false,""name"":""dateTime"",""type"":""string""}],""name"":""PortingLog"",""type"":""event""}]";
private const string byteCode = "606060405260006001556106ee806100176000396000f3606060405260e060020a60003504634f5d64ce811461003f5780637da67ba8146100f95780638babdb68146102b9578063c80fd72c146102fc575b610002565b34610002576103d56004808035906020019082018035906020019191908080601f0160208091040260200160405190810160405280939291908181526020018383808284375050604080516020604435808b0135601f810183900483028401830190945283835297998935999098606498509296509190910193509091508190840183828082843750949650505050505050604080516060810182526000602082018190529181018290528381526104a9855b6020015190565b34610002576040805160208082018352600080835283518083018552818152845180840186528281528551808501875283815286518086018852848152875180870189528581528851606081018a52868152968701869052868901869052855498516103e999959794969394929391929086908059106101765750595b90808252806020026020018201604052801561018d575b5094508560405180591061019e5750595b9080825280602002602001820160405280156101b5575b509350856040518059106101c65750595b9080825280602002602001820160405280156101dd575b509250600091505b858260ff161015610544576002600050600060006000508460ff168154811015610002579060005260206000209001600050548152602080820192909252604090810160002081516060810183528154808252600183015494820194909452600290910154918101919091528651909250869060ff8516908110156100025760209081029091018101919091528101518451859060ff851690811015610002576020908102909101015260408101518351849060ff85169081101561000257602090810290910101526001909101906101e5565b3461000257600435600090815260026020819052604090912080546001820154919092015460408051938452602084019290925282820152519081900360600190f35b346100025760408051602060046024803582810135601f81018590048502860185019096528585526103d59583359593946044949392909201918190840183828082843750506040805160209735808a0135601f81018a90048a0283018a019093528282529698976064979196506024919091019450909250829150840183828082843750506040805160209735808a0135601f81018a90048a0283018a0190935282825296989760849791965060249190910194509092508291508401838280828437509496505050505050506000610552836100f2565b604080519115158252519081900360200190f35b604051808060200180602001806020018481038452878181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050018481038352868181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050018481038252858181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f150905001965050505050505060405180910390f35b60208201526104b7836100f2565b6040820152600080546001810180835582818380158290116104fa576000838152602090206104fa9181019083015b8082111561054057600081556001016104e6565b5050506000928352506020808320909101869055948152600280865260409182902083518155958301516001808801919091559290910151940193909355509092915050565b5090565b509297919650945092505050565b6002600050600087815260200190815260200160002060005060020160005081905550847fabccf710b90915152627544bcdf03474e1571d51db9e4e212c9ade90cb9342d533868686604051808573ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001806020018481038452878181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f16801561061f5780820380516001836020036101000a031916815260200191505b508481038352868181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156106785780820380516001836020036101000a031916815260200191505b508481038252858181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156106d15780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a250600194935050505056";
private static string contractAddress = string.Empty;
static void Main(string[] args)
{
try
{
Initializer();
}
catch (Exception ex)
{
throw;
}
}
public async static void Initializer()
{
try
{
await Init();
await AddAndGetCustomerDataTest();
await PortingTest();
await FilterLogsTest();
}
catch (Exception ex)
{
throw;
}
}
private static async Task Init()
{
try
{
var web3 = new Web3();
var unlockAccountResult =
await web3.Personal.UnlockAccount.SendRequestAsync(senderAddress, password, new HexBigInteger(120));
var transactionHash =
await web3.Eth.DeployContract.SendRequestAsync(abi, byteCode, senderAddress, new HexBigInteger(1999990));
var mineResult = await web3.Miner.Start.SendRequestAsync(2);
var receipt = await MineAndGetReceiptAsync(web3, transactionHash);
contractAddress = receipt.ContractAddress;
}
catch (Exception ex)
{
throw;
}
}
public static async Task AddAndGetCustomerDataTest()
{
var web3 = new Web3();
var contract = web3.Eth.GetContract(abi, contractAddress);
var addCustomerFunction = contract.GetFunction("addCustomer");
var getCustomersByMobileNumberFunction = contract.GetFunction("getCustomersByMobileNumber");
var getAllCustomers = contract.GetFunction("getAllCustomers");
var resultHash = await addCustomerFunction.SendTransactionAsync(senderAddress, new HexBigInteger(900000), new HexBigInteger(0), "Mahesh", 111, "Airtel");
resultHash = await addCustomerFunction.SendTransactionAsync(senderAddress, new HexBigInteger(900000), new HexBigInteger(0), "Mahesh1", 222, "Airtel1");
resultHash = await addCustomerFunction.SendTransactionAsync(senderAddress, new HexBigInteger(900000), new HexBigInteger(0), "Mahesh2", 333, "Airtel2");
resultHash = await addCustomerFunction.SendTransactionAsync(senderAddress, new HexBigInteger(900000), new HexBigInteger(0), "Mahesh3", 444, "Airtel3");
var receipt = await MineAndGetReceiptAsync(web3, resultHash);
var results = await getCustomersByMobileNumberFunction.CallDeserializingToObjectAsync<CustomerData>(111);
var results2 = await getCustomersByMobileNumberFunction.CallDeserializingToObjectAsync<CustomerData>(222);
}
public static async Task PortingTest()
{
var web3 = new Web3();
var contract = web3.Eth.GetContract(abi, contractAddress);
var portFunction = contract.GetFunction("Port");
var getCustomersByMobileNumberFunction = contract.GetFunction("getCustomersByMobileNumber");
var resultHash = await portFunction.SendTransactionAsync(senderAddress, new HexBigInteger(900000), new HexBigInteger(0), 111, "Airtel", "Vodafone");
var receipt = await MineAndGetReceiptAsync(web3, resultHash);
var results = await getCustomersByMobileNumberFunction.CallDeserializingToObjectAsync<CustomerData>(111);
var results2 = await getCustomersByMobileNumberFunction.CallDeserializingToObjectAsync<CustomerData>(222);
}
public static async Task FilterLogsTest()
{
var web3 = new Web3();
var contract = web3.Eth.GetContract(abi, contractAddress);
var multipliedEventLog = contract.GetEvent("MultipliedLog");
var filterAllLog = await multipliedEventLog.CreateFilterAsync();
var multipliedLogEvents = await multipliedEventLog.GetFilterChanges<PortingLog>(filterAllLog);
}
public async static Task<TransactionReceipt> MineAndGetReceiptAsync(Web3 web3, string transactionHash)
{
var miningResult = await web3.Miner.Start.SendRequestAsync(6);
var receipt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(transactionHash);
while (receipt == null)
{
Thread.Sleep(1000);
receipt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(transactionHash);
}
miningResult = await web3.Miner.Stop.SendRequestAsync();
return receipt;
}
}
public class PortingLog
{
[Parameter("address", "sender", 1, true)]
public string Sender { get; set; }
[Parameter("uint", "mobileNumber", 2, true)]
public int MobileNumber { get; set; }
[Parameter("string", "from", 3, false)]
public string From { get; set; }
[Parameter("string", "to", 4, true)]
public string To { get; set; }
[Parameter("string", "to", 5, true)]
public string DateTime { get; set; }
}
[FunctionOutput]
public class CustomerDataList
{
[Parameter("int256[]", "mobile", 1)]
public List<Int64> mobile { get; set; }
[Parameter("bytes32[]", "customerName", 2)]
public List<string> customerName { get; set; }
[Parameter("bytes32[]", "serviceProvider", 3)]
public List<string> serviceProvider { get; set; }
}
[FunctionOutput]
public class CustomerData
{
[Parameter("int256", "mobile", 1)]
public Int64 mobile { get; set; }
[Parameter("bytes32", "customerName", 2)]
public string customerName { get; set; }
[Parameter("bytes32", "serviceProvider", 3)]
public string serviceProvider { get; set; }
}
[FunctionOutput]
public class AllCustomerData
{
//[Parameter("int256[]", "mobile", 1)]
//public List<BigInteger> mobile { get; set; }
[Parameter("bytes32[]", "customerName", 1)]
public List<string> customerName { get; set; }
[Parameter("bytes32[]", "serviceProvider", 2)]
public List<string> serviceProvider { get; set; }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment