Class: Universa::Contract
- Inherits:
-
RemoteAdapter
- Object
- Delegator
- RemoteAdapter
- Universa::Contract
- Defined in:
- lib/universa/contract.rb
Overview
Universa contract adapter.
Class Method Summary collapse
-
.create(issuer_key, expires_at: (Time.now + 90 * 24 * 60 * 60), use_short_address: false) ⇒ Contract
Create simple contract with preset critical parts:.
-
.from_packed(packed) ⇒ Object
Load from transaction pack.
Instance Method Summary collapse
-
#amount ⇒ BigDecimal
Helper for many token-like contracts containing state.data.amount.
-
#amount=(value) ⇒ Object
Write helper for many token-like contracts containing state.data.amount.
-
#can_perform_role(name, *keys) ⇒ Object
Test that some set of keys could be used to perform some role.
-
#create_revocation(*keys) ⇒ Contract
Create a contract that revokes this one if register with the Universa network.
-
#creator ⇒ Role
Shortcut ofr get_creator.
-
#definition ⇒ Object
Definition data.
-
#errors_string ⇒ String
Call it after check to get summaru of errors found.
-
#expires_at ⇒ Object
shortcut for get_expires_at.
-
#expires_at=(time) ⇒ Object
set
expires_at
field. -
#hash_id ⇒ HashId
shortcut for getHashId.
-
#issuer ⇒ Role
Issuer role.
-
#keys_to_sign_with ⇒ Set<PrivateKey>
returns keys that will be used to sign this contract on next #seal.
-
#ok? ⇒ Boolean
Shortcut for is_ok.
-
#origin ⇒ HashId
Of the origin contract.
-
#owner ⇒ Role
Owner role.
-
#owner=(key_address) ⇒ Object
Set owner to the key_address, usable only in the simplest case where owner is the single address.
-
#packed ⇒ Object
Get packed transaction containing the serialized signed contract and all its counterparts.
-
#parent ⇒ HashId
Pf the parent contracr.
-
#seal ⇒ String
seal the contract.
-
#state ⇒ Object
Return
state
binder. -
#trace_errors ⇒ Object
trace found errors (call it afer check()): the Java version will not be able to trace to the process stdout, so we reqrite it here.
-
#transactional ⇒ Binder
Get
transactional.data
section creating it if need.
Methods inherited from RemoteAdapter
#__getobj__, #__setobj__, #initialize, #inspect, invoke_static, remote_class, remote_class_name, #to_s
Constructor Details
This class inherits a constructor from Universa::RemoteAdapter
Class Method Details
.create(issuer_key, expires_at: (Time.now + 90 * 24 * 60 * 60), use_short_address: false) ⇒ Contract
Create simple contract with preset critical parts:
-
expiration set to 90 days unless specified else
-
issuer role is set to the address of the issuer key_address, short ot long
-
creator role is set as link to issuer
-
owner role is set as link to issuer
-
change owner permission is set to link to owner
The while contract is then signed by the issuer key_address. Not that it will not seal it: caller almost always will add more data before it, then must call #seal().
104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/universa/contract.rb', line 104 def self.create issuer_key, expires_at: (Time.now + 90 * 24 * 60 * 60), use_short_address: false contract = Contract.new contract.set_expires_at expires_at contract.set_issuer_keys(use_short_address ? issuer_key.short_address : issuer_key.long_address) contract.register_role(contract.issuer.link_as("owner")) contract.register_role(contract.issuer.link_as("creator")) contract. ChangeOwnerPermission.new(contract.owner.link_as "@owner") contract. RevokePermission.new(contract.owner.link_as "@owner") contract.add_signer_key issuer_key contract end |
.from_packed(packed) ⇒ Object
Load from transaction pack
117 118 119 120 121 |
# File 'lib/universa/contract.rb', line 117 def self.from_packed packed packed.nil? and raise ArgumentError, "packed contract required" packed.force_encoding 'binary' self.invoke_static "fromPackedTransaction", packed end |
Instance Method Details
#amount ⇒ BigDecimal
Helper for many token-like contracts containing state.data.amount
211 212 213 |
# File 'lib/universa/contract.rb', line 211 def amount v = state[:amount] and BigDecimal(v.to_s) end |
#amount=(value) ⇒ Object
Write helper for many token-like contracts containing state.data.amount. Saves value in state.data.anomount and properly encodes it so it will be preserved on packing.
219 220 221 |
# File 'lib/universa/contract.rb', line 219 def amount= (value) state[:amount] = value.to_s.force_encoding('utf-8') end |
#can_perform_role(name, *keys) ⇒ Object
Test that some set of keys could be used to perform some role.
250 251 252 253 254 |
# File 'lib/universa/contract.rb', line 250 def can_perform_role(name, *keys) getRole(name.to_s).isAllowedForKeys(Set.new keys.map {|x| x.is_a?(PrivateKey) ? x.public_key : x }) end |
#create_revocation(*keys) ⇒ Contract
Create a contract that revokes this one if register with the Universa network. BE CAREFUL! REVOCATION IS IRREVERSIBLE! period.
261 262 263 264 265 |
# File 'lib/universa/contract.rb', line 261 def create_revocation(*keys) revoke = Service.umi.invoke_static 'ContractsService', 'createRevocation', *keys revoke.seal revoke end |
#creator ⇒ Role
Shortcut ofr get_creator
137 138 139 |
# File 'lib/universa/contract.rb', line 137 def creator get_creator end |
#definition ⇒ Object
Returns definition data.
190 191 192 |
# File 'lib/universa/contract.rb', line 190 def definition @definition ||= get_definition.get_data end |
#errors_string ⇒ String
Call it after check to get summaru of errors found.
242 243 244 |
# File 'lib/universa/contract.rb', line 242 def errors_string getErrors.map {|e| "(#{e.object || ''}): #{e.error}"}.join(', ').strip end |
#expires_at ⇒ Object
shortcut for get_expires_at. Get the contract expiration time.
179 180 181 |
# File 'lib/universa/contract.rb', line 179 def expires_at get_expires_at end |
#expires_at=(time) ⇒ Object
set expires_at
field
185 186 187 |
# File 'lib/universa/contract.rb', line 185 def expires_at=(time) set_expires_at time end |
#hash_id ⇒ HashId
shortcut for getHashId
164 165 166 |
# File 'lib/universa/contract.rb', line 164 def hash_id getId() end |
#issuer ⇒ Role
Returns issuer role.
142 143 144 |
# File 'lib/universa/contract.rb', line 142 def issuer get_issuer end |
#keys_to_sign_with ⇒ Set<PrivateKey>
returns keys that will be used to sign this contract on next #seal.
131 132 133 |
# File 'lib/universa/contract.rb', line 131 def keys_to_sign_with get_keys_to_sign_with end |
#ok? ⇒ Boolean
Shortcut for is_ok
158 159 160 |
# File 'lib/universa/contract.rb', line 158 def ok? is_ok end |
#origin ⇒ HashId
Returns of the origin contract.
169 170 171 |
# File 'lib/universa/contract.rb', line 169 def origin getOrigin() end |
#owner ⇒ Role
Returns owner role.
147 148 149 |
# File 'lib/universa/contract.rb', line 147 def owner get_owner end |
#owner=(key_address) ⇒ Object
Set owner to the key_address, usable only in the simplest case where owner is the single address.
153 154 155 |
# File 'lib/universa/contract.rb', line 153 def owner=(key_address) set_owner_key key_address end |
#packed ⇒ Object
Get packed transaction containing the serialized signed contract and all its counterparts. Be sure to cal #seal somewhere before.
227 228 229 |
# File 'lib/universa/contract.rb', line 227 def packed get_packed_transaction end |
#parent ⇒ HashId
Returns pf the parent contracr.
174 175 176 |
# File 'lib/universa/contract.rb', line 174 def parent getParent() end |
#seal ⇒ String
seal the contract
125 126 127 |
# File 'lib/universa/contract.rb', line 125 def seal super end |
#state ⇒ Object
Return state
binder. Shortcut for Java API getStateData()
195 196 197 |
# File 'lib/universa/contract.rb', line 195 def state @state ||= getStateData() end |
#trace_errors ⇒ Object
trace found errors (call it afer check()): the Java version will not be able to trace to the process stdout, so we reqrite it here
233 234 235 236 237 |
# File 'lib/universa/contract.rb', line 233 def trace_errors getErrors.each {|e| puts "(#{e.object || ''}): #{e.error}" } end |
#transactional ⇒ Binder
Get transactional.data
section creating it if need
201 202 203 |
# File 'lib/universa/contract.rb', line 201 def transactional @transactional ||= getTransactionalData() end |