Created
December 18, 2021 17:12
-
-
Save mattdesl/1ed4308d8c83d272d815071428ed98ce to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import smartpy as sp | |
class SpectrumColors(sp.Contract): | |
def __init__(self): | |
self.init( | |
# fixed dimensions of the board | |
columns = 16, | |
rows = 16, | |
# limit to the total number of colors possible | |
max_colors = 12, | |
# the map<nat,nat> for the board display | |
display = sp.map(tkey = sp.TNat, tvalue = sp.TNat), | |
) | |
@sp.entry_point | |
def update(self, params): | |
# update a cell by index with a new color | |
sp.verify(sp.amount == sp.tez(0), "the operation does not need tez transfers") | |
color = params.color | |
idx = params.index | |
sp.verify((idx >= 0) & (idx < self.data.rows * self.data.columns), "index out of range") | |
sp.verify((color >= 0) & (color < self.data.max_colors), "color index out of range") | |
self.data.display[idx] = color | |
@sp.offchain_view(pure = True) | |
def get_color(self, idx): | |
# a view that gets us the color at the specified index | |
sp.set_type(idx, sp.TNat) | |
sp.verify((idx >= 0) & (idx < self.data.rows * self.data.columns), "index out of range") | |
sp.result(self.data.display.get(idx, 0)) | |
if "templates" not in __name__: | |
@sp.add_test(name = "SpectrumColors") | |
def test(): | |
c1 = SpectrumColors() | |
scenario = sp.test_scenario() | |
scenario.h1("SpectrumColors") | |
scenario += c1 | |
x = 0 | |
y = 2 | |
rows = 3 | |
columns = 4 | |
index = (x + y * columns) | |
c1.update(color = 3, index = index) | |
c1.update(color = 2, index = index) | |
c1.update(color = 6, index = 1) | |
scenario.p("Epoch").show(c1.data.display) | |
scenario.p("Epoch").show(c1.get_color(index)) | |
sp.add_compilation_target("storeValue", SpectrumColors()) |
Thanks! It’s deployed on test net so Michelson is visible there:
https://better-call.dev/hangzhou2net/KT1MeQytVramwMXJRyksTemX2B7qF4MJoRSG/code
If you have a testnet funds + dev wallet you can also interact with the contract through the block explorer.
Awesome, thanks! Good to see these side by side! 🙏
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@mattdesl noice! Is there an easy way for you to dump out the compiled Michelson source too? Would very much like to compare...