Skip to content

Instantly share code, notes, and snippets.

@beber89
beber89 / actions.go
Created September 16, 2019 22:03
web/actions.go - package web
func RegisterCallbacks() {
js.Global().Set("reward", js.FuncOf(reward))
js.Global().Set("buyCommodity", js.FuncOf(buyCommodity))
js.Global().Set("networth", js.FuncOf(networth))
js.Global().Set("changeUser", js.FuncOf(changeUser))
js.Global().Set("sendSliderValToWasm", js.FuncOf(sendSliderValToWasm))
}
var (
merchant string
@beber89
beber89 / index.html
Created September 16, 2019 22:27
index.html
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="styles.css" media="screen" />
<script src="wasm_exec.js"></script>
<script>
const go = new Go();
WebAssembly.instantiateStreaming(fetch("main.wasm"), go.importObject).then((result) => {go.run(result.instance);});
</script>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"
@beber89
beber89 / renderer.go
Created September 17, 2019 15:28
renderer.go
// renderPage reloads elements of the page when change to wallet occurs
func RenderPage() {
wlt := *GetWallet()
document := js.Global().Get("document")
chainView := (*wlt.GetBlockchain()).Draw()
if chn := document.Call("getElementById", "chain"); chn != js.Null() {
document.Call("getElementById", "blockchain-placeholder").Call("removeChild", chn)
}
document.Call("getElementById", "blockchain-placeholder").Call("appendChild", chainView)
networthLabel := document.Call("getElementById", "networth")
@beber89
beber89 / wallet.go
Created September 17, 2019 18:06
blockchain/wallet.go
var NotifyListeners func()
// Wallet is the interface struct to the blockchain for the user
type Wallet struct {
username string
chain *Blockchain
}
// NewWallet creates a Wallet struct
func NewWallet(username string) Wallet {
@beber89
beber89 / main.go
Last active September 17, 2019 19:11
miner-dapp-wasm/main.go
var wg sync.WaitGroup
func main() {
wg.Add(1)
web.RegisterCallbacks()
wg.Wait()
}
@beber89
beber89 / transaction.go
Last active September 24, 2019 09:27
miner-dapp-wasm/blockchain/transaction
type Transaction struct {
From string `json:"from"`
To string `json:"to"`
Amount float64 `json:"amount"`
}
@beber89
beber89 / block.go
Last active September 24, 2019 09:37
miner-dapp-wasm/blockchain/block/struct
// Block is the building entity for the blockchain
type Block struct {
id uint64
lastBlockHash [32]byte
nonce uint64
payload Transaction
difficulty uint8
timestamp uint64
hash [32]byte
}
@beber89
beber89 / block.go
Created September 24, 2019 09:39
miner-dapp-wasm/blockchain/block/doHash
func (blk *Block) doHash() {
type toBeHashed struct {
id uint64
lastBlockHash [32]byte
nonce uint64
payload Transaction
difficulty uint8
timestamp uint64
}
h := sha256.New()
@beber89
beber89 / block.go
Created September 24, 2019 09:47
miner-dapp-wasm/blockchain/block/hashValid
func (blk *Block) hashValid() bool {
hash := blk.hash
// put in mind Little Endian
// converting the 8 most significant bytes of hash to one number int
hashAsInt := uint64(0)
for i := uint8(1); i <= uint8(8); i++ {
hashAsInt = uint64(hash[32-i])<<((8-i)*8) + hashAsInt
}
diff := (uint64(1)<<63)>>(blk.difficulty-1) - 1
return hashAsInt <= diff
@beber89
beber89 / blockchain.go
Created September 24, 2019 09:56
miner-dapp-wasm/blockchain/blockchain
type Blockchain struct {
chain []Block
}
func listener(blkchn *Blockchain, msg string) {
// mining happen creating new block
// string payload shall be converted to transaction struct
var trMsg TransactionMessage
trMsg.Deserialize(msg)
var blk Block