I have the following smart contract where I pass admin address in the init function of the smart contract: (you can run it on smartPy online editor)
class SC(sp.Contract):
def __init__(self, admin):
self.init(administrator = admin, value = 0)
@sp.entry_point
def increment(self, params):
sp.verify(sp.sender == self.data.administrator)
self.data.value =+ 1
if "templates" not in __name__:
@sp.add_test(name = "SC")
def test():
scenario = sp.test_scenario()
scenario.h1("SC")
admin = sp.address("tz1-admin-address-1234")
alice = sp.address("tz1-alice-address-1234")
c1 = SC(admin)
scenario += c1
scenario.h2("Admin increments value")
scenario += c1.increment().run(sender = admin)
scenario.h2("Alice tries to increment value")
scenario += c1.increment().run(sender = alice, valid = False)
scenario.verify(c1.data.value == 1)
Can I initiate the administrator field in storage by doing something like:
class SC(sp.Contract):
# admin is no longer passed here
def __init__(self):
# Difference here
self.init(administrator = sp.source, value = 0)
@sp.entry_point
def increment(self, params):
sp.verify(sp.sender == self.data.administrator)
self.data.value =+ 1
if "templates" not in __name__:
@sp.add_test(name = "SC")
def test():
scenario = sp.test_scenario()
scenario.h1("SC")
admin = sp.address("tz1-admin-address-1234")
alice = sp.address("tz1-alice-address-1234")
# Difference here
c1 = SC().run(source = admin) # or c1 = SC()
scenario += c1
scenario.h2("Admin increments value")
scenario += c1.increment().run(sender = admin)
scenario.h2("Alice tries to increment value")
scenario += c1.increment().run(sender = alice, valid = False)
scenario.verify(c1.data.value == 1)
What I want is initiate the administrator without passing his address in the init when deploying but by setting the deployer (source of the origination) as administrator.
Thank you in advance.