Skip to content

Instantly share code, notes, and snippets.

@kswang
kswang / log.sol
Created October 16, 2018 21:35
event logging
event Log(string msg, uint value);
function sendCoin(address receiver, uint amount) public returns(bool sufficient) {
if (balances[msg.sender] < amount) return false;
emit Log("step 1", amount);
balances[msg.sender] -= amount;
emit Log("step 2", amount);
balances[receiver] += amount;
emit Log("step 3", amount);
emit Transfer(msg.sender, receiver, amount);
return true;
@kswang
kswang / metacoin_contract.sol
Created October 16, 2018 21:06
metacoin smart contract
pragma solidity ^1.4.18;
import "./ConvertLib.sol";
// This is just a simple example of a coin-like contract.
// It is not standards compatible and cannot be expected to talk to other
// coin/token contracts. If you want to create a standards-compliant
// token, see: https://github.com/ConsenSys/Tokens. Cheers!
contract MetaCoin {
@kswang
kswang / metacoin_test.js
Created October 16, 2018 20:56
async/await test
const MetaCoin = artifacts.require("MetaCoin");
contract('2nd MetaCoin test', async (accounts) => {
it("should put 10000 MetaCoin in the first account", async () => {
let instance = await MetaCoin.deployed();
let balance = await instance.getBalance.call(accounts[0]);
assert.equal(balance.valueOf(), 10000);
})
@kswang
kswang / metacoin.js
Created October 16, 2018 20:54
metacoin.js
var MetaCoin = artifacts.require("./MetaCoin.sol");
contract('MetaCoin', function(accounts) {
it("should put 10000 MetaCoin in the first account", function() {
return MetaCoin.deployed().then(function(instance) {
return instance.getBalance.call(accounts[0]);
}).then(function(balance) {
assert.equal(balance.valueOf(), 10000, "10000 wasn't in the first account");
});
});
@kswang
kswang / listen_filter.java
Created October 15, 2018 21:59
listening to events emitted by network and filtering for both failed and success transactions for relevant contracts
Observable<Transaction> myCatchUpToLatestAndSubscribeToNewTransactionsObservable(
DefaultBlockParameter startBlock) {
return web3j.catchUpToLatestAndSubscribeToNewBlocksObservable(startBlock, false)
.flatMap(currentBlock -> {
BigInteger confirmedBlock = currentBlock.getBlock().getNumber().subtract(confirmationBlock);
return web3j.ethGetBlockByNumber(DefaultBlockParameter.valueOf(confirmedBlock), true).observable();
}).flatMapIterable(MyWeb3j::toTransactions);
}
@kswang
kswang / subscribe_v2.java
Created October 15, 2018 21:52
contract event listener v2
// Main.java
public void subscribe() {
Web3j web3j = Web3j.build(new HttpService("http://123.123.123:8545")); // your ethereum clinet
List<Handler> handlers = Lists.newArrayList(new OwnershipTransferredEventHandler()); // init all the handler objects
String[] topics = handlers.stream().map(Handler::getTopic).toArray(String[]::new);
EthFilter filter = new EthFilter(startBlock, DefaultBlockParameterName.LATEST, contractAddress);
filter.addOptionalTopics(topics);
Subscription subscription = web3j.ethLogObservable(filter)
@kswang
kswang / mycontract.java
Last active October 15, 2018 21:47
contract_subscribe_v1
public class MyContract extends Contract {
private static final String BINARY = "";
public static final Event OWNERSHIPTRANSFERRED_EVENT = new Event("OwnershipTransferred",
Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}, new TypeReference<Address>(true) {}));
public Observable<OwnershipTransferredEventResponse> ownershipTransferredEventObservable(EthFilter filter) {
return web3j.ethLogObservable(filter).map(new Func1<Log, OwnershipTransferredEventResponse>() {
@Override
public OwnershipTransferredEventResponse call(Log log) {
042530a350d04e6bd37080fce4fd1a87ba70793f8ec6d29804fbcbea5a07a9480a9c14c52570055fb939aff09d7636424cbfca4bbe94742188fee832c167fc7e53

Keybase proof

I hereby claim:

  • I am kswang on github.
  • I am kswang (https://keybase.io/kswang) on keybase.
  • I have a public key whose fingerprint is 0A38 0D6D 151F 9E78 1B6D 32D7 43A1 EE46 2170 6F31

To claim this, I am signing this object: