Own Private Messenger.
An example of a free messenger for a specific circle of participants.
This is an example of a public messenger:
https://wall.0xbt.net/BigBalls.htmlWorks on the Rinkeby test networkTo create your own messenger.
1. Go to MyEtherWallet
- Section 'Contracts'
- Click 'Deploy Contract'
- Paste "Byte Code":
0x60806040526040805190810160405280601f81526020017f57656c636f6d6520746f207468652050726f6a65637420307862742e6e6574008152506000908051906020019061004f929190610062565b5034801561005c57600080fd5b50610107565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100a357805160ff19168380011785556100d1565b828001600101855582156100d1579182015b828111156100d05782518255916020019190600101906100b5565b5b5090506100de91906100e2565b5090565b61010491905b808211156101005760008160009055506001016100e8565b5090565b90565b6102d7806101166000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680638c6838ba14610051578063c38caab5146100e1575b600080fd5b34801561005d57600080fd5b5061006661014a565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100a657808201518184015260208101905061008b565b50505050905090810190601f1680156100d35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156100ed57600080fd5b50610148600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506101ec565b005b606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156101e25780601f106101b7576101008083540402835291602001916101e2565b820191906000526020600020905b8154815290600101906020018083116101c557829003601f168201915b5050505050905090565b8060009080519060200190610202929190610206565b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061024757805160ff1916838001178555610275565b82800160010185558215610275579182015b82811115610274578251825591602001919060010190610259565b5b5090506102829190610286565b5090565b6102a891905b808211156102a457600081600090555060010161028c565b5090565b905600a165627a7a7230582088266c3e343870866e9dc688e0b18de7babf9b7c16a7e14318ed514ac232ac780029
Gas Limit at its discretion, asked 3,000,000
- Connect to MetaMask
- Click 'Sign Transaction'
- Click 'Deploy Contract'
- When calling MetaMask, you can safely reduce the Gas to 10 gwei
You have created a contract of your messenger!
2. In this
messenger code, change the contract 0xae4243e2c0f910223323dd2f2fdd16820b69f1d6
- insert your contract in lines
31 and 70(39 and 90)
<html>
<head>
<meta charset="utf-8">
<title>BigBalls :)</title>
<link rel="shortcut icon" href="https://wall.0xbt.net/assets/images/m1-120x120.png" type="image/x-icon">
<script src="https://rinkeby.etherscan.io/cdn-cgi/apps/head/4wF8T_csPHk5U5Lb4Ye_MOdzMxk.js"></script>
<link rel='stylesheet' type='text/css' href='https://fonts.googleapis.com/css?family=Open+Sans:400,300,600&subset=cyrillic,latin'>
<script type="text/javascript" src="https://rinkeby.etherscan.io/jss/web3.min.js?v=0.20.6"></script>
<script type="text/javascript" src="https://rinkeby.etherscan.io/jss/bignumber.js"></script>
<style>
a {
text-decoration: none; /* Отменяем подчеркивание у ссылки */
}
button.knopka {
color: #fff;
background: #828282;
padding: 5px;
border-radius: 5px;
border: 2px solid #teal;
}
button.knopka:hover {
background: #000;
}
</style>
</head>
<body style="background-color:#2E2E2E">
<table border = "15" width ="100%" cellpadding = "5" cellspacing ="15" bordercolor="#2E2E2E" bgcolor=""><tr><td>
<!--<div class="row" style="padding-top:54px;">-->
<div class="col-md-12">
<div class="row">
</div>
</div>
<!--</div>-->
<center>
<h4><span style="color:teal"><b>Rinkeby TestNet</b></span></h4><br>
<button class="knopka" id='btn_5'><a href="https://rinkeby.etherscan.io/writecontract/index.html?a=0xae4243e2c0f910223323dd2f2fdd16820b69f1d6&n=rinkeby" title="section - '4. setPost'" target="_blank"><b><span style="color:white;">Send <i class="fa fa-btc"></i> News</span></b></a></button>
<button type='button' id='btn_5' class="knopka" onclick="ethcall2('getPost', 'input_5','myanswer_5','string', '|string', 'btn_5');">Get <i class="fa fa-btc"></i> News</button>
<div align="left"><b><span id='myanswer_5' style="color:teal"></span></b></div><br><br>
</center>
</body></td></tr></table>
<script src="https://code.jquery.com/jquery-1.10.2.min.js"></script>
<script>
$('#overlay', window.parent.document).hide();
jQuery(window).load(function () {
var mode = getParameterByName("m");
if (mode === "dark") {
var src = $('body');
src.addClass('dark-mode');
}
$('#overlay').fadeOut("slow");
var obj = window.parent.document.getElementById('readcontractiframe');
if (obj)
parent.resizeIframe(obj, 0);
});
function getcontractabi(contractaddress) {
$.post("https://Rinkeby.etherscan.io/api",
{
module: "contract",
action: "getabit",
address: contractaddress
},
function (data, status) {
console.log("contractAbi = " + data)
});
}
var Web3 = require('web3');
var web3 = new Web3(new Web3.providers.HttpProvider("https://rinkeby.infura.io/v3/80f1c00345214da4bdbc4d02f35fb265"));
var version = web3.version.api;
console.log(version);
var MyContract;
var myContractInstance;
try {
MyContract = web3.eth.contract([{"constant":true,"inputs":[],"name":"getPost","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newPost","type":"string"}],"name":"setPost","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]);
myContractInstance = MyContract.at("0xae4243e2c0f910223323dd2f2fdd16820b69f1d6");
}
catch (err) {
console.log(err.message);
}
function ethcall2(strMethodName, strInputElementName, strOutputElementName, strOutputtype, strOutputFieldNames, strBtnName) {
var functionNametoCall = "myContractInstance." + strMethodName;
var result;
try {
var strparas;
var elms = document.querySelectorAll("[id=" + strInputElementName + "]");
//console.log("elms.length = " + elms.length);
for (var i = 0; i < elms.length; i++) {
if (i == 0) {
strparas = "'" + add0xforAddress(Escape(elms[i].value)) + "'"
} else {
strparas = strparas + ",'" + Escape(elms[i].value) + "'"
}
if (elms[i].value == '') {
document.getElementById(strInputElementName).focus();
alert('Input value cannot be empty');
return false;
}
}
showLoading(true, strBtnName);
new Function(functionNametoCall + "(" + strparas + ", function(err, res){ if (err) {result = err;} else { result = res; } showMessage('" + strMethodName +"',result,'" + strOutputElementName+"','" + strOutputFieldNames +"','"+ strBtnName +"'); });")();
// result = eval(functionNametoCall + "(" + strparas + ");");
// $('#overlay').show();
}
catch (err) {
//$('#overlay').show();
result = "" + err + "";
showLoading(false, strBtnName);
}
//setTimeout(function () {
// $('#overlay').show();
//}, 2500);
//document.getElementById(strOutputElementName).innerHTML = "<br><br> [ <b>" + strMethodName + "</b> method Response ]<br>" + formatmultipleoutputs(result, strOutputFieldNames) + "<br>";
}
function showMessage(strMethodName, result, strOutputElementName, strOutputFieldNames, strBtnName) {
document.getElementById(strOutputElementName).innerHTML = "<br><br> [ <b>" + strMethodName + "</b> method Response ]<br>" + formatmultipleoutputs(result, strOutputFieldNames) + "<br>";
showLoading(false, strBtnName);
//var obj = window.parent.document.getElementById('readcontractiframe');
// parent.resizeIframe(obj, 0);
}
function showLoading(isShow, strBtnName) {
if (isShow) {
$(" <img id='waiting_" + strBtnName + "' class='waitingImg' src='https://rinkeby.etherscan.io/images/ajax-loader2.gif' style='margin-left:5px;' alt='Loading' />").insertAfter($('#' + strBtnName));
$('#' + strBtnName).prop('disabled', true);
} else {
$('#' + strBtnName).prop('disabled', false);
$('#waiting_' + strBtnName).remove();
}
}
function Escape(val) {
return val.replace(/'/g, "\\u0027");
}
function formatmultipleoutputs(strVal, strOutputFieldNames) {
var strAnswer = '';
//console.log("strVal = " + strVal);
//console.log("strOutputFieldNames = " + strOutputFieldNames);
//console.log("strVal.length = " + strVal.length);
if (strOutputFieldNames.includes(';') == true) {
var res_2 = strOutputFieldNames.split(';');
for (i = 0; i < strVal.length; i++) {
var tmparray = res_2[i].toString().split('|');
strAnswer = strAnswer + " <span class='text-success'><i class='fa fa-angle-double-right'></i></span> ";
if (res_2[i] != null && res_2[i].toString() != '') {
strAnswer = strAnswer + " <strong>" + tmparray[0] + "</strong> <span class='text-secondary'><i>" + tmparray[1] + "</i></span> <b>:</b> "
}
strAnswer = strAnswer + formatresult(strVal[i].toString(), tmparray[1]) + "<br>";
}
} else {
strAnswer = strAnswer + " <span class='text-success'><i class='fa fa-angle-double-right'></i></span> ";
if (strOutputFieldNames != '') {
var tmparray = strOutputFieldNames.toString().split('|');
strAnswer = strAnswer + " <strong>" + tmparray[0] + "</strong> <span class='text-secondary'><i>" + tmparray[1] + "</i></span> <b>:</b> ";
strVal = formatresult(strVal.toString(), tmparray[1])
}
strAnswer = strAnswer + replaceAll(strVal, ",", "<br> <span class='text-success'><i class='fa fa-angle-double-right'></i></span> ") + "<br>";
}
return strAnswer;
}
function htmlEncode(value) {
return $('<div/>').text(value).html();
}
function replaceAll(str, find, replace) {
return str.replace(new RegExp(find, 'g'), replace);
}
function formatresult(strResult, resulttype) {
if (resulttype.startsWith('uint')) {
return toFixed(strResult);
} else if (resulttype == 'string') {
return htmlEncode(strResult);
//return hex_to_ascii(strResult);
} else if (resulttype == 'address') {
if (strResult != '0x0000000000000000000000000000000000000000') {
return "<a href='/address/" + strResult + "' target='_blank'>" + strResult + "</a>";
} else {
return htmlEncode(strResult);
}
//} else if (resulttype == 'bool') {
// return Boolean(remove0x(strResult));
} else {
return htmlEncode(strResult);
}
}
function hex_to_ascii(str1) {
var hex = str1.toString();
var str = '';
for (var n = 0; n < hex.length; n += 2) {
str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));
}
return str;
}
function extractaddress(str1) {
if (str1.length > 40) {
str1.substr(str1.length - 40)
}
return str1;
}
function remove0x(str1) {
if (str1.startsWith("0x") == true) {
str1 = str1.substr(str1.length - str1.length + 2);
}
return str1;
}
function add0xforAddress(straddress) {
straddress = straddress.trim();
if (straddress.startsWith("0x") == false && straddress.length == 40) {
straddress = "0x" + straddress;
}
return straddress;
}
function toFixed(x) {
if (x.indexOf("e+") !== -1) {
var value = web3.toBigNumber(x);
x = value.toString(10);
}
return x;
}
setTimeout(function () {
}, 0);
function getParameterByName(name) {
var url = window.location.href;
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
$(document).ready(function () {
$(window).keydown(function (event) {
if (event.keyCode == 13) {
event.preventDefault();
return false;
}
});
});
</script>
</html>
Copy the code and convert to Base64
https://base64.0xbt.net/Before the code, insert "
data:text/html;base64,"
Paste the received code into the Google Chrome browser line.
Everything, you have your own messenger.
All you have to do is share the received code with your relatives or with friends.
Looking for what purpose you created it.
If you want to encrypt your messages, you can use service
https://webcrypt.0xbt.net/Using this messenger in the Rinkeby network you can use
its free. For this you need a test Ether.
Good luck!