Web3 through the lens of
Spatial Finance 🌱
John IV
Technical Director
London Blockchain Labs
What is Web3?
A decentralized spatial finance application
🌱
Developer Advocate� @ Ordnance Survey
Technical Director
@ London Blockchain Labs
Founder
@ Astral Protocol
John IV
@johnx25bd
john.iv@x25bd.com
It makes economic sense to pollute.
The decentralized web
The user-controlled Internet
Cryptography: Hashing /
Digital signature algorithms
Networked computing
Open consensus �protocols
Game theory
The decentralized web
The user-controlled Internet
A blockchain is a type of database maintained by a consensus network, which - according to a protocol - validates blocks of transactions to update the state of the ledger over time.
A blockchain is a type of database maintained by a consensus network, which - according to a protocol - validates blocks of transactions to update the state of the ledger over time.
A blockchain is a type of database maintained by a consensus network, which - according to a protocol - validates blocks of transactions to update the state of the ledger over time.
0x25bd | 1.23411 |
0xEeEeE | 0.12839 |
A blockchain is a type of database maintained by a consensus network, which - according to a protocol - validates blocks of transactions to update the state of the ledger over time
0x25bd | 1.23411 |
0xEeEeE | 0.12839 |
A blockchain is a type of database maintained by a consensus network, which - according to a protocol - validates blocks of transactions to update the state of the ledger over time.
(Nakamoto 2008)
A blockchain is a type of database maintained by a consensus network, which - according to a protocol - validates blocks of transactions to update the state of the ledger over time.
(Wood 2013)
A blockchain is a type of database maintained by a consensus network, which - according to a protocol - validates blocks of transactions to update the state of the ledger over time.
| |
| |
✓
A blockchain is a type of database maintained by a consensus network, which - according to a protocol - validates blocks of transactions to update the state of the ledger over time.
| |
| |
✓
✓
A blockchain is a type of database maintained by a consensus network, which - according to a protocol - validates blocks of transactions to update the state of the ledger over time.
| |
| |
✓
✓
}
block
A blockchain is a type of database maintained by a consensus network, which - according to a protocol - validates blocks of transactions to update the state of the ledger over time.
| |
| |
✓
✓
} transaction
A blockchain is a type of database maintained by a consensus network, which - according to a protocol - validates blocks of transactions to update the state of the ledger over time.
| |
| |
✓
✓
| |
| |
| |
| |
✓
✓
✓
A blockchain is a type of database maintained by a consensus network, which - according to a protocol - validates blocks of transactions to update the state of the ledger over time.
| |
| |
✓
✓
| |
| |
| |
| |
| |
| |
| |
| |
| |
✓
✓
✓
✓
✓
A blockchain is a type of database maintained by a consensus network, which - according to a protocol - validates blocks of transactions to update the state of the ledger over time.
| |
| |
✓
✓
| |
| |
| |
| |
| |
| |
| |
| |
| |
✓
✓
✓
✓
✓
time
A smart contract is a computer program stored on a blockchain and executed by the consensus network.
A smart contract is a computer program stored on a blockchain and executed by the consensus network.
A smart contract is a computer program stored on a blockchain and executed by the consensus network.
A smart contract is a computer program stored on a blockchain and executed by the consensus network.
// SPDX-License-Identifier: GPL-3.0
pragma solidity >= 0.7.0;
contract Coin {
// The keyword "public" makes variables
// accessible from other contracts
address public minter;
mapping (address => uint) public balances;
// Events allow clients to react to specific
// contract changes you declare
event Sent(address from, address to, uint amount);
// Constructor code is only run when the contract
// is created
constructor() {
minter = msg.sender;
}
// Sends an amount of newly created coins to an address
// Can only be called by the contract creator
function mint(address receiver, uint amount) public {
require(msg.sender == minter);
require(amount < 1e60);
balances[receiver] += amount;
}
// Sends an amount of existing coins
// from any caller to an address
function send(address receiver, uint amount) public {
require(amount <= balances[msg.sender], � "Insufficient balance.");
balances[msg.sender] -= amount;
balances[receiver] += amount;
emit Sent(msg.sender, receiver, amount);
}
}
compiler
{
"generatedSources": [],
"linkReferences": {},
"object": "608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061047f806100606000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063075461721461005157806327e235e31461008557806340c10f19146100dd578063d0679d341461012b575b600080fd5b610059610179565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100c76004803603602081101561009b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061019d565b6040518082815260200191505060405180910390f35b610129600480360360408110156100f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506101b5565b005b6101776004803603604081101561014157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610283565b005b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461020d57600080fd5b789f4f2726179a224501d762422c946590d91000000000000000811061023257600080fd5b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115610338576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f496e73756666696369656e742062616c616e63652e000000000000000000000081525060200191505060405180910390fd5b80600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055507f3990db2d31862302a685e8086b5755072a6e2b5b780af1ee81ece35ee3cd3345338383604051808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a1505056fea2646970667358221220118e3c47ebc48b82786bd6ba9bbcfbc22c0a919052a99fca1b4780de0035e7c664736f6c63430007050033",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLER PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x47F DUP1 PUSH2 0x60 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7546172 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x27E235E3 EQ PUSH2 0x85 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0xDD JUMPI DUP1 PUSH4 0xD0679D34 EQ PUSH2 0x12B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x59 PUSH2 0x179 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xC7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x19D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x129 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xF3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x1B5 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x177 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x141 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x283 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 POP SWAP1 POP SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x20D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH25 0x9F4F2726179A224501D762422C946590D91000000000000000 DUP2 LT PUSH2 0x232 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD ADD SWAP3 POP POP DUP2 SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x338 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x15 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x496E73756666696369656E742062616C616E63652E0000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD SUB SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP1 PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD ADD SWAP3 POP POP DUP2 SWAP1 SSTORE POP PUSH32 0x3990DB2D31862302A685E8086B5755072A6E2B5B780AF1EE81ECE35EE3CD3345 CALLER DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 GT DUP15 EXTCODECOPY SELFBALANCE 0xEB 0xC4 DUP12 DUP3 PUSH25 0x6BD6BA9BBCFBC22C0A919052A99FCA1B4780DE0035E7C66473 PUSH16 0x6C634300070500330000000000000000 ",
"sourceMap": "63:1047:0:-:0;;;444:48;;;;;;;;;;476:10;467:6;;:19;;;;;;;;;;;;;;;;;;63:1047;;;;;;"
}
A smart contract is a computer program stored on a blockchain and executed by the consensus network.
ethers.js
(async function() {
// Create an instance of a Contract Factory
let factory = new ethers.ContractFactory(abi, bytecode, wallet);
// Notice we pass in "Hello World" as � //the parameter to the constructor
let contract = await factory.deploy("Hello World");
await contract.deployed()
// Done! The contract is deployed.
})();
✅
Creates a contract instance
+
returns
A contract address
0xd9145CCE52D386f254917e481eB44e9943F39138
A smart contract is a computer program stored on a blockchain and executed by the consensus network.
✅
Invokes contract + �Updates state
to: contract address
A smart contract is a computer program stored on a blockchain and executed by the consensus network.
🤯
Smart contracts can own assets and transfer them based on clearly defined rules.
What is Web3?
A decentralized spatial finance application
🌱
✅
A decentralized spatial finance application
🌱
🛰 Spatial Finance
“the integration of geospatial data and analysis into financial theory and financial practice.”
🌱
Dr Ben Caldecott
Founding Director
Oxford Sustainable Finance Programme
Web3 x
Spatial Finance
🌱
The Problem
💰 Incentive structures limit � climate action.
🌱
The Opportunity
💡 Redesign these incentive � structures using Web3 technologies.
🌱
A sustainability-linked bond
🛰
Validator
ML
16 Jun: 0.1421
17 Jun: 0.1231
18 Jun: 0.1771
19 Jun: 0.2021
20 Jun: 0.2001
21 Jun: 0.2314
oracle
API
🔏→ cash transfers
🔏→ Δ interest rate
🔏→ conditional loan
disbursements
🔏→ ESG auditing
🌱
Spatial data analysis
Raster
Vector
🌱
Spatial data analysis
Ordnance Survey | 15th April 2020
Raster
Vector
🌱
Spatial data analysis
Raster
Vector
0 | 1 | 0 | 0 | 0 | 0 | 0 |
0 | 1 | 1 | 0 | 0 | 0 | 0 |
0 | 1 | 1 | 1 | 0 | 0 | 0 |
0 | 1 | 1 | 1 | 1 | 0 | 0 |
0 | 1 | 1 | 1 | 1 | 1 | 0 |
[9.3, 8.7],
[11.5, 6.2],
[10.4, 1.1],
[7.7, 0.3],
[6.0, 2.3],
[5.1, 0.2],
[[2.5, 7.0],
[2.5, 7.0]]
🌱
Spatial data analysis
Raster
Vector
0 | 1 | 0 | 0 | 0 | 0 | 0 |
0 | 1 | 1 | 0 | 0 | 0 | 0 |
0 | 1 | 1 | 1 | 0 | 0 | 0 |
0 | 1 | 1 | 1 | 1 | 0 | 0 |
0 | 1 | 1 | 1 | 1 | 1 | 0 |
[9.3, 8.7],
[11.5, 6.2],
[10.4, 1.1],
[7.7, 0.3],
[6.0, 2.3],
[5.1, 0.2],
[[2.5, 7.0],
[2.5, 7.0]]
🌱
Spatial data analysis
Raster
Vector
0 | 1 | 0 | 0 | 0 | 0 | 0 |
0 | 1 | 1 | 0 | 0 | 0 | 0 |
0 | 1 | 1 | 1 | 0 | 0 | 0 |
0 | 1 | 1 | 1 | 1 | 0 | 0 |
0 | 1 | 1 | 1 | 1 | 1 | 0 |
[9.3, 8.7]
[11.5, 6.2]
[10.4, 1.1]
[7.7, 0.3]
[6.0, 2.3]
[5.1, 0.2]
[2.5, 7.0]
🌱
Spatial data analysis
Ordnance Survey | 15th April 2020
Raster
Vector
0 | 1 | 0 | 0 | 0 | 0 | 0 |
0 | 1 | 1 | 0 | 0 | 0 | 0 |
0 | 1 | 1 | 1 | 0 | 0 | 0 |
0 | 1 | 1 | 1 | 1 | 0 | 0 |
0 | 1 | 1 | 1 | 1 | 1 | 0 |
[9.3, 8.7]
[11.5, 6.2]
[10.4, 1.1]
[7.7, 0.3]
[6.0, 2.3]
[5.1, 0.2]
[2.5, 7.0]
🌱
rasterio
geopandas,
A sustainability-linked bond
🌱
… 🔮
capture
analysis
storage
oracle
Smart contract
Data
A sustainability-linked bond
🌱
Year | Mean annual NOx | Fixed payment | Variable payment | Total payment |
2020 | 51.334 | £100 000 | £51 334 | £151 334 |
2021 | 53.854 | £100 000 | £53 854 | £153 854 |
2022 | 49.122 | £100 000 | £49 122 | £149 122 |
2023 | 47.331 | £100 000 | £47 331 | £147 331 |
2024 | 43.355 | £100 000 | £43 355 | £143 355 |
The potential of Web3
🌱
🕴
🌱
💰
The potential of Web3
🕴
🌱
💰
🌱
Questions?
@ldnlabs
@johnx25bd
@astraldao