Skip to content

Instantly share code, notes, and snippets.

@MykolaSauliak
Created December 12, 2019 03:28
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 MykolaSauliak/52c721812d4641ccfb058149b2a2ee3b to your computer and use it in GitHub Desktop.
Save MykolaSauliak/52c721812d4641ccfb058149b2a2ee3b to your computer and use it in GitHub Desktop.
Honeycomb API usage inside Ethereum smart-contract
pragma solidity 0.4.24;
import "https://github.com/smartcontractkit/chainlink/evm/contracts/ChainlinkClient.sol";
import "https://github.com/smartcontractkit/chainlink/evm/contracts/vendor/Ownable.sol";
// last deployed contract - 0x6869bB190b75bf9c058662970A572537DC61d82a
// 0x5D71c462b6fD182dBEaC9ce577b15C6EBB39F821 -
// oracle address = 0x4a3fbbb385b5efeb4bc84a25aaadcd644bd09721
// jobId - d1d029a5f50c44789f19da3ec4e51e7b (bytes)
// token - 0x20fE562d797A42Dcb3399062AE9546cd06f63280
// oracle Neutrino 0x4a3fbbb385b5efeb4bc84a25aaadcd644bd09721
// ipinfo - bytes32 68a7a089c830423584ace76fa96967d8
// hex - 0x3638613761303839633833303432333538346163653736666139363936376438
// bad word filter - ebd878dd37464f9f8b5411e3819468b5
// hex - 0x6562643837386464333734363466396638623534313165333831393436386235
// neutrino browser-bot jobId - 29ea1f47f6504ed188e00b3d7b81ac49
// hex - 0x3239656131663437663635303465643138386530306233643762383161633439
// price in wei - 111000000000000000
// 111000000000000000
// or
// 100000000000000000
// {
// "url" : "https://www.add.ua/ua/sumamed-poroshok-dlja-prigotovlenija-suspenzii-100mg-5-ml-flakon-20ml-kalibr-shpr-lozh.html?amp=1",
// "selector": ".price-description"
// }
contract ShareAnalyzes is ChainlinkClient, Ownable {
struct ShareData {
address doctor;
string content;
string url;
bytes32 city;
}
struct SecureNote {
address[] trustedAccount;
string content;
bytes32 trustedCity;
bool active;
uint256 ts;
}
uint256 private oraclePaymentAmount;
bytes32 private jobIpInfoId;
bytes32 private jobBadWordId;
bytes32 private jobBrowserBotId;
// requestId -> city defined
mapping (bytes32 => bool) public resultCityRecivedMapping;
mapping (bytes32 => bytes32) public resultCityMapping;
// requestId -> contains bad words
mapping (bytes32 => bool) public resultBadWordRecivedMapping;
mapping (bytes32 => bool) public resultBadWordMapping;
// requestId -> use vpn
mapping (bytes32 => bool) public resultIsVpnRecivedMapping;
mapping (bytes32 => bool) public resultIsVpnMapping;
// requestId -> price from website
mapping (bytes32 => bool) public resultPriceRecievedMapping;
mapping (bytes32 => bytes32) public resultPriceMapping;
//uuid - data
mapping(string => ShareData) private accessMapping;
// mapping(string => bool) private hasDataForMapping;
mapping(address => SecureNote) private secureNoteMapping;
constructor(
address _link,
address _oracle,
bytes32 _jobId,
bytes32 _jobId2,
bytes32 _jobId3,
uint256 _oraclePaymentAmount
)
public
{
setChainlinkToken(_link);
setChainlinkOracle(_oracle);
jobIpInfoId = _jobId;
jobBadWordId = _jobId2;
jobBrowserBotId = _jobId3;
oraclePaymentAmount = _oraclePaymentAmount;
}
function setAccess(string _uuid, address _who, bytes32 _badWordsRequestId, string _url, bytes32 _city) external returns (bool successfull){
require(resultBadWordRecivedMapping[_badWordsRequestId] = true);
require(resultBadWordMapping[_badWordsRequestId] == false);
ShareData memory newData = ShareData({url : _url, content : "", city : _city, doctor : _who});
accessMapping[_uuid] = newData;
successfull = true;
}
function setAccess(string _uuid, address _who, string _content, bytes32 _badWordsRequestId, bytes32 _city) external returns (bool successfull){
require(resultBadWordRecivedMapping[_badWordsRequestId] = true);
require(resultBadWordMapping[_badWordsRequestId] == false);
ShareData memory newData = ShareData({url : "", content: _content, city : _city, doctor : _who});
accessMapping[_uuid] = newData;
successfull = true;
}
function compareStrings (string memory a, string memory b) public pure returns (bool) {
return (keccak256(abi.encodePacked((a))) == keccak256(abi.encodePacked((b))) );
}
function readLink(string _uuid, bytes32 _requestId, bytes32 _cityRequestId) external view returns (string url){
require(resultCityRecivedMapping[_cityRequestId] == true );
require(resultIsVpnRecivedMapping[_requestId] == true );
require(resultIsVpnMapping[_requestId] == false);
// string memory _city = accessMapping[msg.sender].city;
bytes32 userCity = resultCityMapping[_cityRequestId];
bytes32 city = accessMapping[_uuid].city;
// require(compareStrings(userCity, city));
require(city == userCity);
url = accessMapping[_uuid].url;
}
function readSharedDataContent(string _uuid, bytes32 _requestId, bytes32 _cityRequestId) external view returns (string content){
require(resultCityRecivedMapping[_cityRequestId] == true );
require(resultIsVpnRecivedMapping[_requestId] == true );
require(resultIsVpnMapping[_requestId] == false);
// string memory _city = accessMapping[msg.sender].city;
bytes32 userCity = resultCityMapping[_cityRequestId];
bytes32 city = accessMapping[_uuid].city;
// require(compareStrings(userCity, city));
require(city == userCity);
content = accessMapping[_uuid].content;
}
// location by ip
function makeRequest(string _ip) external returns (bytes32 requestId){
Chainlink.Request memory req = buildChainlinkRequest(jobIpInfoId, this, this.fulfill.selector);
req.add("ip", _ip);
req.add("copyPath", "city");
requestId = sendChainlinkRequestTo(chainlinkOracleAddress(), req, oraclePaymentAmount);
}
// get bad words contains info
function makeRequest2(string _content) external returns (bytes32 requestId){
Chainlink.Request memory req = buildChainlinkRequest(jobBadWordId, this, this.fulfill2.selector);
req.add("content", _content);
req.add("copyPath", "is-bad");
requestId = sendChainlinkRequestTo(chainlinkOracleAddress(), req, oraclePaymentAmount);
}
// is_vpn - from ip
function makeRequest3(string _ip) external returns (bytes32 requestId){
Chainlink.Request memory req = buildChainlinkRequest(jobIpInfoId, this, this.fulfill3.selector);
req.add("ip", _ip);
req.add("copyPath", "is-vpn");
requestId = sendChainlinkRequestTo(chainlinkOracleAddress(), req, oraclePaymentAmount);
}
// price
function requestPrice(string url, string _selector) external returns (bytes32 requestId){
Chainlink.Request memory req = buildChainlinkRequest(jobBrowserBotId, this, this.fulfillPrice.selector);
req.add("url", url);
req.add("selector", _selector);
req.add("copyPath", "title");
requestId = sendChainlinkRequestTo(chainlinkOracleAddress(), req, oraclePaymentAmount);
}
// for city
function fulfill(bytes32 _requestId, bytes32 _result) public recordChainlinkFulfillment(_requestId){
resultCityRecivedMapping[_requestId] = true;
resultCityMapping[_requestId] = _result;
}
// for bad words
function fulfill2(bytes32 _requestId, bool _result) public recordChainlinkFulfillment(_requestId){
resultBadWordRecivedMapping[_requestId] = true;
resultBadWordMapping[_requestId] = _result;
}
// for is-vpn
function fulfill3(bytes32 _requestId, bool _result) public recordChainlinkFulfillment(_requestId){
resultIsVpnRecivedMapping[_requestId] = true;
resultIsVpnMapping[_requestId] = _result;
}
// for price
function fulfillPrice(bytes32 _requestId, bytes32 _result) public recordChainlinkFulfillment(_requestId){
resultPriceRecievedMapping[_requestId] = true;
resultPriceMapping[_requestId] = _result;
}
function hasSecureNote(address _owner) view returns (bool){
if(!secureNoteMapping[_owner].active){
return false;
}
return true;
}
function writeSecureNote(address[] _trustedAccount, string _content, bytes32 _trustedCity) external returns (bool){
SecureNote memory newNote = SecureNote({trustedAccount: _trustedAccount, content : _content, trustedCity : _trustedCity, active : true, ts : block.timestamp });
secureNoteMapping[msg.sender] = newNote;
return true;
}
function getSecureNote(address _owner, bytes32 __cityRequestId, bytes32 _vpnRequestId) external returns (string content){
require(resultIsVpnRecivedMapping[_vpnRequestId]);
require(resultCityRecivedMapping[_vpnRequestId]);
require(resultIsVpnMapping[_vpnRequestId] == false);
require(secureNoteMapping[_owner].active == true);
bytes32 trustedCity = secureNoteMapping[_owner].trustedCity;
require(trustedCity == resultCityMapping[__cityRequestId]);
content = secureNoteMapping[_owner].content;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment